互联网工程任务组 (IETF)                         M. Nottingham
征求意见稿:8615                                          2019 年 5 月
废止:5785
更新:72307595
类别:标准轨道
ISSN: 2070-1721


             知名统一资源标识符(URI)

摘要

   本备忘录为所选统一资源标识符(URI)方案中的“知名位置”
   定义了路径前缀 "/.well-known/"。

   这样做废止了 RFC 5785,并更新了 RFC 7230 中定义的 URI 方案,
   以保留该空间。它还更新了 RFC 7595,以便在注册表中跟踪支持
   知名 URI 的 URI 方案。

本备忘录的状态

   这是一份互联网标准轨道文档。

   本文档是互联网工程任务组(IETF)的产物。它代表了 IETF
   社群的共识。它已经过公开审查,并由互联网工程指导组
   (IESG)批准发布。有关互联网标准的更多信息可见
   RFC 7841 第 2 节。

   有关本文档当前状态、任何勘误以及如何提供反馈的信息,
   可从
   https://www.rfc-editor.org/info/rfc8615 获得。

版权声明

   版权所有 (c) 2019 IETF Trust 以及标识为本文档作者的人员。
   保留所有权利。

   本文档受 BCP 78 以及本文档发布日期生效的 IETF Trust
   与 IETF 文档相关的法律条款
   (https://trustee.ietf.org/license-info)约束。
   请仔细阅读这些文档,因为它们描述了你关于本文档的权利和限制。
   从本文档中提取的代码组件必须包含 Trust Legal Provisions
   第 4.e 节所述的简化 BSD 许可证文本,并按简化 BSD 许可证
   所述不提供担保。



Nottingham                   标准轨道                         [第 1 页]


RFC 8615                     知名 URI                         2019 年 5 月


目录

   1.  引言  . . . . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  记号约定  . . . . . . . . . . . . . . . . . . . . . . . . .   3
   3.  知名 URI . . . . . . . . . . . . . . . . . . . . . . . . .   3
     3.1.  注册知名 URI . . . . . . . . . . . . . . . . . . . . .   4
   4.  安全考虑事项 . . . . . . . . . . . . . . . . . . . . . .   5
     4.1.  保护知名资源 . . . . . . . . . . . . . . . . . . . . .   6
     4.2.  与 Web 浏览的交互  . . . . . . . . . . . . . . . . . .   6
     4.3.  限定应用的作用域  . . . . . . . . . . . . . . . . . .   7
     4.4.  隐藏能力 . . . . . . . . . . . . . . . . . . . . . . .   8
   5.  IANA 考虑事项 . . . . . . . . . . . . . . . . . . . . . .   8
     5.1.  知名 URI 注册表  . . . . . . . . . . . . . . . . . . .   8
     5.2.  统一资源标识符(URI)方案注册表  . . . . . . . . .   9
   6.  参考文献  . . . . . . . . . . . . . . . . . . . . . . . .   9
     6.1.  规范性参考文献  . . . . . . . . . . . . . . . . . . .   9
     6.2.  资料性参考文献  . . . . . . . . . . . . . . . . . . .  10
   附录 A.  常见问题 . . . . . . . . . . . . . . . . . . . . .  12
   附录 B.  相对于 RFC 5785 的变更  . . . . . . . . . . . . . .  12
   作者地址  . . . . . . . . . . . . . . . . . . . . . . . . .  12

1.  引言

   Web 上的某些应用在发出请求之前,需要发现有关某个源
   [RFC6454] 的信息(有时称为“站点范围元数据”)。例如,
   Robots Exclusion Protocol
   (http://www.robotstxt.org)规定了一种方式,使自动化进程能够
   获取访问资源的许可;同样,Platform for Privacy Preferences
   [P3P] 告诉用户代理如何在与源服务器交互之前发现隐私
   政策。

   虽然有若干方式可以访问每个资源的元数据(例如 HTTP 首部字段、
   Web Distributed Authoring and Versioning (WebDAV) [RFC4918]
   中的 PROPFIND),但与这些方式相关的感知开销(无论是客户端
   感知的延迟,还是部署困难,或二者兼有)往往妨碍了它们在这些
   场景中的使用。

   与此同时,将 HTTP 用作非 Web 协议底层承载的做法已经变得
   更加流行。有时,此类协议需要一种方式来定位给定主机上的一个
   或多个资源。

   当发生这种情况时,一种解决方案是为与整个源相关的数据或服务
   指定一个“知名位置”,以便能够轻松定位它。然而,这种做法存在
   缺点:它既可能与其他此类指定的“知名位置”发生冲突,也可能与
   该源已经创建(或希望创建)的资源发生冲突。此外,定义知名位置
   会篡夺该源对其自身 URI 空间的控制 [RFC7320]。



Nottingham                   标准轨道                         [第 2 页]


RFC 8615                     知名 URI                         2019 年 5 月


   为了解决这些用例,本备忘录在 HTTP、HTTPS、WebSocket (WS) 和
   Secure WebSocket (WSS) URI 中为这些“知名位置”保留了一个
   路径前缀 "/.well-known/"。未来需要为此类元数据定义资源的
   规范可以注册其用途,以避免冲突,并尽量减少对源 URI 空间的
   影响。

   知名 URI 也可以与其他 URI 方案一起使用,但仅当这些方案的定义
   明确允许这样做时才可以。

2.  记号约定

   本文档中的关键词 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、
   "SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、
   "NOT RECOMMENDED"、"MAY" 和 "OPTIONAL",当且仅当它们如本文所示
   以全大写形式出现时,应按 BCP 14 [RFC2119] [RFC8174] 中的说明解释。

3.  知名 URI

   知名 URI 是一种 URI [RFC3986],其路径组件以字符
   "/.well-known/" 开头,前提是该方案被明确规定支持知名 URI。

   例如,如果某个应用注册了名称 'example',那么在
   'http://www.example.com/' 上对应的知名 URI 将是
   'http://www.example.com/.well-known/example'。

   本规范更新了 "http" [RFC7230] 和 "https" [RFC7230]
   方案,以支持知名 URI。其他现有方案可以使用适当流程来更新其
   定义;例如,[RFC8307] 就为 "ws" 和 "wss" 方案这样做。
   "Uniform Resource Identifier (URI) Schemes" 注册表跟踪哪些方案
   支持知名 URI;见第 5.2 节。

   希望铸造新的知名 URI 的应用必须注册它们,并遵循
   第 5.1 节中的流程,同时满足以下要求。

   注册名称必须符合 [RFC3986] 中的 "segment-nz" 产生式。
   这意味着它们不能包含 "/" 字符。

   特定应用的注册名称应该相应地精确;不鼓励“占用”通用术语。
   例如,如果 Example 应用需要一个用于元数据的知名位置,
   合适的注册名称可以是 "example-metadata",甚至是
   "example.com-metadata",而不是 "metadata"。





Nottingham                   标准轨道                         [第 3 页]


RFC 8615                     知名 URI                         2019 年 5 月


   注册至少会引用一个规范,该规范定义通过解引用知名 URI 所获得的
   格式和相关媒体类型,以及可与该知名 URI 一起使用的 URI 方案。
   如果没有明确指定 URI 方案,则假定为 "http" 和 "https"。

   通常,应用会使用给定方案的默认端口;如果使用了替代端口,
   则有关应用必须明确指定它。

   注册也可以包含附加信息,例如要追加到知名 URI 的附加路径组件、
   查询字符串和/或片段标识符的语法,或者特定于协议的细节
   (例如 HTTP [RFC7231] 方法处理)。

   请注意,本规范既不定义如何确定用于为特定应用查找知名 URI 的
   主机名,也不定义通过解引用该知名 URI 所发现元数据的作用域;
   二者都应由应用本身定义。

   此外,本规范没有为位于 "/.well-known/" 的资源定义格式或媒体
   类型,客户端不应期望该位置存在资源。

   知名 URI 根植于路径层次结构的顶部;按定义,它们在路径的其他
   部分并不是知名的。例如,"/.well-known/example" 是知名 URI,
   而 "/foo/.well-known/example" 不是。

   另请参见第 4 节,了解关于知名位置的安全考虑事项。

3.1.  注册知名 URI

   "Well-Known URIs" 注册表位于
   <https://www.iana.org/assignments/well-known-uris/>。注册请求
   可以按照该处的说明提交,也可以通过向
   <wellknown-uri-review@ietf.org> 邮件列表发送电子邮件来提交。

   注册请求至少包括以下信息:

   URI suffix:  相对于 "/.well-known/" 所请求的知名 URI 名称;
      例如 "example"。






Nottingham                   标准轨道                         [第 4 页]


RFC 8615                     知名 URI                         2019 年 5 月


   Change controller:  对于标准轨道 RFC,写明 "IETF"。对于其他项,
      给出负责方的名称。也可以包含其他细节(例如电子邮件地址、
      主页 URI)。

   Specification document(s):  指向规定该字段的文档的引用,最好
      包括可用于获取该文档副本的 URI。也可以包含相关章节的指示,
      但这不是必需的。

   Status:  "permanent" 或 "provisional" 之一。见下文指导。

   Related information:  可选地,引用包含进一步相关信息的附加文档。

   已注册值的一般要求在第 3 节中描述。

   由标准轨道 RFC 和其他开放标准(在 [RFC2026] 第 7.1.1 节
   意义上)定义的值,其状态为 "permanent"。如果专家在与社群
   协商后发现其他值正在使用,也可以将其注册为 permanent。
   其他值应注册为 "provisional"。

   如果专家在与社群协商后发现 provisional 条目未被使用,专家可以
   移除这些条目。专家可以将 provisional 条目的状态更改为
   permanent;这样做时,专家应考虑该值被使用的广泛程度,并事先
   咨询社群。

   请注意,上文中的“咨询社群”指的是负责所涉及 URI 方案的人群。
   通常,这会在相应工作组(可能已经结束)的邮件列表上进行,
   如果不存在这样的列表,则在 <art@ietf.org> 上进行。

   如果专家确定某个未注册的知名 URI 已被广泛部署,并且不太可能
   以其他方式及时注册,则知名 URI 可以由第三方(包括专家)注册。
   此类注册仍须满足所定义的要求,包括需要引用规范。

4.  安全考虑事项

   铸造新知名 URI 的应用以及部署它们的管理员,需要考虑若干与
   安全相关的问题,包括但不限于敏感数据暴露、拒绝服务攻击
   (除了普通负载问题之外)、服务器





Nottingham                   标准轨道                         [第 5 页]


RFC 8615                     知名 URI                         2019 年 5 月


   和客户端认证、易受 DNS 重新绑定攻击的影响,以及有限的服务器
   访问权限却能影响知名 URI 服务方式的攻击。

   [RFC3552] 包含一些可能与应用协议以及部署它们的管理员相关的
   潜在安全考虑事项示例。

4.1.  保护知名资源

   由于知名位置实际上代表整个源,服务器操作员应适当地控制对这些
   位置的写入能力。当多个实体共处于同一源上时,这一点尤其重要。
   即使对于由单个实体控制并代表单个实体的源,也应谨慎确保不会
   无意授予对知名位置的写入访问权限,无论是通过服务器配置从外部
   授予,还是通过实现权限(例如在文件系统上)在本地授予。

4.2.  与 Web 浏览的交互

   对 "http" 或 "https" URL 使用知名 URI 的应用需要意识到,
   知名资源将可被 Web 浏览器访问,因此能够被从该源其他部分获得的
   内容操纵。如果攻击者能够注入内容(例如通过跨站脚本漏洞),
   他们就能够向知名资源发起可能任意的请求。

   HTTP 和 HTTPS 还将源用作许多其他机制的安全边界,包括但不限于
   cookie [RFC6265]、Web Storage [WEBSTORAGE] 以及各种能力。

   定义知名位置的应用不应假定它对这些机制具有独占访问权,或假定
   它是使用该源的唯一应用。根据应用的性质,缓解措施可以包括:

   o  加密敏感信息

   o  允许灵活使用标识符(例如 cookie 名称),以避免与其他应用
      发生冲突

   o  在 cookie 上使用 'HttpOnly' 标志,以确保 cookie 不会暴露给
      浏览器脚本语言 [RFC6265]

   o  在 cookie 上使用 'Path' 参数,以确保它们不会对源的其他部分
      可用 [RFC6265]



Nottingham                   标准轨道                         [第 6 页]


RFC 8615                     知名 URI                         2019 年 5 月


   o  使用 X-Content-Type-Options: nosniff [FETCH],以确保攻击者
      控制下的内容不会被诱导成由 Web 浏览器解释为主动内容的形式

   其他良好实践包括:

   o  在 Content-Type 首部字段中使用特定于应用的媒体类型,并要求
      客户端在未使用它时失败

   o  使用 Content-Security-Policy [CSP] 约束主动内容
      (例如 HTML [HTML5])的能力,从而缓解跨站脚本攻击

   o  使用 Referrer-Policy [REFERRER-POLICY],防止 URL 中的敏感数据
      在 Referer 请求首部字段中泄漏

   o  避免对任何敏感信息(例如认证令牌、密码)使用压缩,因为
      Web 浏览器提供的脚本环境允许攻击者反复探测压缩空间;
      如果攻击者能够访问通信路径,他们就可以利用这种能力恢复
      该信息。

4.3.  限定应用的作用域

   本备忘录不指定从知名 URI 获得的信息的适用作用域,也不指定如何
   为特定应用发现知名 URI。

   使用此机制的各个应用必须定义这两个方面;如果未指定这一点,
   实现偏差以及对应用之间边界的混淆可能会导致安全问题。

   将在知名 URI 中发现的元数据应用于并非共处同一源上的资源,
   会带来管理和安全方面的风险。例如,允许
   "https://example.com/.well-known/example" 将策略应用到
   "https://department.example.com"、"https://www.example.com",甚至
   "https://www.example.com:8000",会假定主机之间存在某种关系,
   而实际上可能并不存在,从而把控制权交给潜在攻击者。

   同样,规定在特定主机名上的知名 URI 用于引导某个协议,可能会
   导致大量不需要的请求。例如,如果使用知名 HTTPS URI 来查找关于
   电子邮件等单独服务的策略,即使 Web 服务器未实现该知名 URI,
   也可能导致请求洪水





Nottingham                   标准轨道                         [第 7 页]


RFC 8615                     知名 URI                         2019 年 5 月


   涌向 Web 服务器。此类不需要的请求可能类似于拒绝服务攻击。

4.4.  隐藏能力

   使用知名位置的应用应考虑到,一些服务器管理员可能不知道它们的
   存在(尤其是在会隐藏名称以 "." 开头的目录的操作系统上)。
   这意味着,如果攻击者拥有对 .well-known 目录的写入权限,
   他们就能够控制其内容,而管理员可能并未意识到这一点。

5.  IANA 考虑事项

5.1.  知名 URI 注册表

   本规范更新了最初在 [RFC5785] 中定义的 "Well-
   Known URI" 注册表的注册流程;见第 3.1 节。

   知名 URI 根据一名或多名专家的建议进行注册,并要求提供规范
   (使用 [RFC8126] 中的术语)。

   专家在评估注册请求时的主要考虑事项是:

   o  符合第 3 节中的要求

   o  规范文档的可获得性和稳定性

   o  第 4 节中概述的考虑事项

   IANA 将把任何收到的注册请求发送者引导至本文档,并在已定义的
   情况下,引导至专家制定的流程;通常,这意味着将他们引向注册表
   网页。

   根据本文档,IANA 已经:

   o  将注册流程更新为需要规范。

   o  向注册表添加了 "Status" 列,并将所有现有注册标记为
      "permanent"。








Nottingham                   标准轨道                         [第 8 页]


RFC 8615                     知名 URI                         2019 年 5 月


5.2.  统一资源标识符(URI)方案注册表

   本规范向 "Uniform Resource Identifier (URI) Schemes" 注册表的
   注册模板添加了一个字段,名称为 "Well-Known URI Support",
   默认值为 "-"。

   如果某个 URI 方案已被明确规定按第 3 节使用知名 URI,
   该值会更改为对该规范的引用。表 1 给出了不等于 "-" 的初始值。

                  +------------+------------------------+
                  | URI 方案   | 知名 URI 支持          |
                  +------------+------------------------+
                  | coap       | [RFC7252]              |
                  | coap+tcp   | [RFC8323]              |
                  | coap+ws    | [RFC8323]              |
                  | coaps      | [RFC7252]              |
                  | coaps+tcp  | [RFC8323]              |
                  | coaps+ws   | [RFC8323]              |
                  | http       | [RFC8615]              |
                  | https      | [RFC8615]              |
                  | ws         | [RFC8307]              |
                  | wss        | [RFC8307]              |
                  +------------+------------------------+

       表 1:URI 方案注册表中新增列非空的行

6.  参考文献

6.1.  规范性参考文献

   [RFC2119]  Bradner, S., "用于在 RFC 中指示要求级别的关键词",
              BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, 1997 年 3 月,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "统一
              资源标识符(URI):通用语法", STD 66,
              RFC 3986, DOI 10.17487/RFC3986, 2005 年 1 月,
              <https://www.rfc-editor.org/info/rfc3986>.

   [RFC6454]  Barth, A., "Web 源概念", RFC 6454,
              DOI 10.17487/RFC6454, 2011 年 12 月,
              <https://www.rfc-editor.org/info/rfc6454>.







Nottingham                   标准轨道                         [第 9 页]


RFC 8615                     知名 URI                         2019 年 5 月


   [RFC7230]  Fielding, R., Ed. and J. Reschke, Ed., "超文本传输
              协议(HTTP/1.1):消息语法和路由",
              RFC 7230, DOI 10.17487/RFC7230, 2014 年 6 月,
              <https://www.rfc-editor.org/info/rfc7230>.

   [RFC8126]  Cotton, M., Leiba, B., and T. Narten, "编写 IANA
              考虑事项章节的指南", BCP 26,
              RFC 8126, DOI 10.17487/RFC8126, 2017 年 6 月,
              <https://www.rfc-editor.org/info/rfc8126>.

   [RFC8174]  Leiba, B., "RFC 2119 关键词中大写与小写的歧义",
              BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              2017 年 5 月, <https://www.rfc-editor.org/info/rfc8174>.

6.2.  资料性参考文献

   [CSP]      West, M., "Content Security Policy Level 3", World Wide
              Web Consortium WD WD-CSP3-20160913, 2016 年 9 月,
              <https://www.w3.org/TR/2016/WD-CSP3-20160913>.

   [FETCH]    WHATWG, "Fetch - 现行标准",
              <https://fetch.spec.whatwg.org>.

   [HTML5]    WHATWG, "HTML - 现行标准",
              <https://html.spec.whatwg.org>.

   [P3P]      Marchiori, M., "Platform for Privacy Preferences 1.0
              (P3P1.0) 规范", World Wide Web Consortium
              Recommendation REC-P3P-20020416, 2002 年 4 月,
              <http://www.w3.org/TR/2002/REC-P3P-20020416>.

   [REFERRER-POLICY]
              Eisinger, J. and E. Stark, "Referrer Policy", World Wide
              Web Consortium CR CR-referrer-policy-20170126, 2017 年 1 月,
              <https://www.w3.org/TR/2017/CR-referrer-policy-20170126>.

   [RFC2026]  Bradner, S., "互联网标准流程 -- 修订版 3",
              BCP 9, RFC 2026, DOI 10.17487/RFC2026, 1996 年 10 月,
              <https://www.rfc-editor.org/info/rfc2026>.

   [RFC3552]  Rescorla, E. and B. Korver, "编写 RFC 文本中安全考虑
              事项的指南", BCP 72, RFC 3552,
              DOI 10.17487/RFC3552, 2003 年 7 月,
              <https://www.rfc-editor.org/info/rfc3552>.






Nottingham                   标准轨道                         [第 10 页]


RFC 8615                     知名 URI                         2019 年 5 月


   [RFC4918]  Dusseault, L., Ed., "用于 Web 分布式创作与版本控制
              (WebDAV)的 HTTP 扩展", RFC 4918,
              DOI 10.17487/RFC4918, 2007 年 6 月,
              <https://www.rfc-editor.org/info/rfc4918>.

   [RFC5785]  Nottingham, M. and E. Hammer-Lahav, "定义知名统一资源
              标识符(URI)", RFC 5785,
              DOI 10.17487/RFC5785, 2010 年 4 月,
              <https://www.rfc-editor.org/info/rfc5785>.

   [RFC6265]  Barth, A., "HTTP 状态管理机制", RFC 6265,
              DOI 10.17487/RFC6265, 2011 年 4 月,
              <https://www.rfc-editor.org/info/rfc6265>.

   [RFC7231]  Fielding, R., Ed. and J. Reschke, Ed., "超文本传输
              协议(HTTP/1.1):语义与内容", RFC 7231,
              DOI 10.17487/RFC7231, 2014 年 6 月,
              <https://www.rfc-editor.org/info/rfc7231>.

   [RFC7252]  Shelby, Z., Hartke, K., and C. Bormann, "受限应用协议
              (CoAP)", RFC 7252,
              DOI 10.17487/RFC7252, 2014 年 6 月,
              <https://www.rfc-editor.org/info/rfc7252>.

   [RFC7320]  Nottingham, M., "URI 设计与所有权", BCP 190,
              RFC 7320, DOI 10.17487/RFC7320, 2014 年 7 月,
              <https://www.rfc-editor.org/info/rfc7320>.

   [RFC8307]  Bormann, C., "WebSocket 协议的知名 URI",
              RFC 8307, DOI 10.17487/RFC8307, 2018 年 1 月,
              <https://www.rfc-editor.org/info/rfc8307>.

   [RFC8323]  Bormann, C., Lemay, S., Tschofenig, H., Hartke, K.,
              Silverajan, B., and B. Raymor, Ed., "基于 TCP、TLS 和
              WebSocket 的 CoAP(受限应用协议)",
              RFC 8323, DOI 10.17487/RFC8323, 2018 年 2 月,
              <https://www.rfc-editor.org/info/rfc8323>.

   [WEBSTORAGE]
              Hickson, I., "Web Storage(第二版)", World Wide
              Web Consortium Recommendation REC-webstorage-20160419,
              2016 年 4 月,
              <http://www.w3.org/TR/2016/REC-webstorage-20160419>.








Nottingham                   标准轨道                         [第 11 页]


RFC 8615                     知名 URI                         2019 年 5 月


附录 A.  常见问题

   知名位置对 Web 来说不是坏事吗?
      是的,但由于各种原因——既有技术原因,也有社会原因——
      它们有时是必要的。本备忘录为它们定义了一个“沙箱”,
      以降低冲突风险,并尽量减少对站点上既有 URI 的影响。

   为什么是 "/.well-known?"
      它很短、具有描述性,并且根据搜索索引显示,并未被广泛使用。

   这对现有机制(例如 P3P 和 robots.txt)有什么影响?
      没有影响,除非它们选择使用此机制。

   为什么不定义每个目录的知名位置?
      允许每个 URI 路径段都有一个知名位置(例如
      "/images/.well-known/")会增加与站点上既有 URI 发生冲突的
      风险,而且通常发现这些解决方案扩展性不好,因为它们过于
      “话多”。

附录 B.  相对于 RFC 5785 的变更

   o  允许非 Web 知名位置

   o  调整了 IANA 说明

   o  更新了参考文献

   o  作出了各种其他澄清

   o  在 "Uniform Resource Identifier (URI) Schemes" 注册表中跟踪
      支持方案

作者地址

   Mark Nottingham

   Email: mnot@mnot.net
   URI:   https://www.mnot.net/









Nottingham                   标准轨道                         [第 12 页]