[2] [[RFC 5785]] は [[URL]] の「[DFN[[RUBYB[よく知られた場所]@en[well-known locations]]]]」
の登録簿を規定しています。これは (主に) [[HTTP]] で特定の情報を得たい時にアクセスするべきであるとハードコードされる
[[URL]] で、 [[robots.txt]] のような用途を想定しています。 [WEAK[(が、 [[robots.txt]] はこの定義における「よく知られた場所」ではありません。)]]

* 仕様書

[REFS[
- [1] '''[[RFC 5785]] [CITE@en[Defining Well-Known Uniform Resource Identifiers (URIs)]] <http://tools.ietf.org/html/rfc5785>'''
- [14] [CITE[Well-Known URIs]] ([TIME[2015-01-21 08:00:34 +09:00]] 版) <http://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml>
- [24] [CITE@en[RFC 8164 - Opportunistic Security for HTTP/2]] ([TIME[2017-05-11 15:47:35 +09:00]]) <https://tools.ietf.org/html/rfc8164#section-4.5>
]REFS]

* 構文

[4] [[URL]] の [[path]] 部は
[PRE(URI example code)[
/.well-known/{URL接尾辞}
]PRE]
のように、「[CODE(URI)@en[[[.well-known]]]]」が最初の [[path]] 部品で、
2つ目の [[path]] 部品「URL [RUBYB[接尾辞]@en[suffix]]」が所望の情報を表す名前です。

;; [5] 「[CODE(URI)@en[[[.well-known]]]]」という名前なのは衝突を避けるためですが、不恰好ですね。

[6] 2つ目の [[path]] 部品は構文的には [[URL]] [CODE(ABNF)@en[[[segment-nz]]]] でなければなりません
[SRC[>>1]]。

[7] 3つ目以降は2つ目の「{URL 接尾辞}」部分に依存して好きに使っていいようです。
[[query]], [[fragment]] も好きにしてよいとされています [SRC[>>1]]。

* 登録

[8] 基本的には [[RFC 5226]] の手続きに準じて、仕様書があることを条件に[[指定専門家]]への諮問を経て登録されます。
詳しくは [[RFC 5785]] を読んでください。

[9] 新しい「よく知られた場所」を作ろうとする[[アプリケーション]]は、URL接尾辞を登録しなければ[['''なりません''']]
[SRC[>>1]]。

;; [10] 「[[アプリケーション]]」の定義が若干微妙ではありますが、これにより、
「[CODE(URI)@en[/.well-known/]]」ではじまる [[URL]] の一般利用は禁止されることになります。

* path の一覧

[FIG(list)[ [20] 主要な[[パス][URL path]]
- [CODE(URI)@en[[[/.well-known/host-meta]]]]
- [CODE(URI)@en[[[/.well-known/host-meta.json]]]]
- [CODE(URI)@en[[[/.well-known/ni/]]]]
- [CODE(URI)@en[[[/.well-known/hoba]]]]
- [CODE(URI)@en[[[/.well-known/statements.json]]]]
- [CODE(URI)@en[/.well-known/assetlinks.json]]
- [CODE(URI)@en[/.well-known/apple-app-site-association]]
- [CODE(URI)@en[/.well-known/http-opportunistic]]
- [CODE(URI)@en[/.well-known/modify-credentials]]
- [CODE(URI)@en[/.well-known/time]]

[HISTORY[
- [CODE[/.well-known/dnt/]]
]HISTORY]
]FIG]

* 対応 URL scheme の一覧

[3] 「よく知られた場所」の規定が適用されるのは特定の [[URL scheme]] だけです。
[[RFC 5785]] では [CODE(URI)@en[[[http:]]]] と [CODE(URI)@en[[[https:]]]]
に適用するとし、それらを定義する [[RFC]] を[RUBYB[[[更新]]]@en[update]]しています。
また、それ以外の [[URL scheme]] でも明示的に適用されると規定されていれば適用されることになっています。

[13] 次の [[URL scheme]] に適用されることになっています。

[FIG(short list)[
- [CODE(URI)@en[[[http:]]]]
- [CODE(URI)@en[[[https:]]]]
- [CODE(URI)@en[[[coap:]]]]
- [CODE(URI)@en[[[coaps:]]]]
]FIG]

* セキュリティー

[18] 「よく知られた場所」の中には、当該[[サーバー]]の管理権限を持つことを確認するためのもの、
当該[[サーバー]]の他の[[資源]]へのアクセスに関する設定を記述するためのものなど、
セキュリティー的に深刻な影響を持つものもあります。

[19] [[UGC]] サービスなどで[[第三者]]が任意の [[path]] の内容を書き換えられる[[サーバー]]では、
「よく知られた場所」の扱いに十分注意を払う必要があります。

[25] [[サーバー]]は、自己の管理下に置くよう適切な処置を取る[SHOULD[べきです]]
[SRC[>>24]]。

[EG[
[21] [[ブログ]]サービスの中には[[記事]]の[[パス][URL path]]を[[利用者]]が設定できるようにしているものもありますが、
悪意ある[[利用者]]が [CODE[/.well-known/]] 以下に任意の内容の[[記事]]を書けると、
困ることもあるかもしれません。
]EG]

* 関連

[26] [[META-INF/]], [[特別なファイル名]]

* 歴史

[11] [[RFC 5785]] は [CODE(URI)@en[[[http:]]]] を規定する [[RFC 2616]]
と [CODE(URI)@en[[[https:]]]] を規定する [[RFC 2818]] を[[更新]]する形を採っています。

[12] しかしこれらの改訂である [[RFC 7230]] は [[RFC 5785]] を[[更新]]どころか参照すらしておらず、宙に浮いた形になっています。

[16] [[RFC正誤表]]における指摘 [SRC[>>15]] は、 [[RFC 5785]] は何も[[更新]]していないのだから、
[[更新]]という形にするべきではなかったと述べています。

[22] そうはいっても、元は自由に使えることになっていた[[パス][URL path]]の[[名前空間]]に勝手に新しい意味を割り当てるわけですから、
[[HTTP(S) URL]] の[[仕様]]の一部改訂であり、[[IETF]] の手続きとしては[[更新]]が相応しかったと思いますが・・・。

[REFS[
- [15] [CITE[RFC Errata Report]] ([TIME[2015-02-16 11:41:01 +09:00]] 版) <http://www.rfc-editor.org/errata_search.php?rfc=5785>
]REFS]

* メモ

[17] [[HTTPサーバー]]の実装によっては [CODE[.][FULL STOP]] から始まる [[path segment]]
の [[URL]] を使えないかもしれません。

[23] [[Unix]] では [CODE[.][FULL STOP]] から始まる[[ファイル名]]は[[隠しファイル]]を表しており、
設定ファイルやプライベートなファイルなどに使われています。
[[ファイルシステム]]を[[写像]]する [[HTTPサーバー]]の実装や設定は、
そうした[[ファイル]]が意図せず漏洩することを防ぐため、
[CODE[.][FULL STOP]] から始まる[[ファイル名]]の時 [[HTTP]] アクセスを拒否している場合があるのです。
