HTTP関連のRFCや標準ドキュメントのリンク集

# HTTP関連のRFCや標準ドキュメントのリンク集

HTTP関連のRFCや標準ドキュメントのリンク集です。随時更新。

抜け・漏れ・勘違い・誤記などありましたらコメントや編集リクエストでお知らせください。

参考書籍:

* [「Real World HTTP」(渋川 よしき, オライリージャパン, 2017)](https://amzn.to/2CSW8vt)
  * [https://www.amazon.co.jp/dp/4873118042/](https://amzn.to/2CSW8vt)
* [「Webを支える技術」(山本 陽平, 技術評論社, 2010)](https://amzn.to/2Fbv4Kl)
  * [https://www.amazon.co.jp/dp/4774142042/](https://amzn.to/2Fbv4Kl)

セキュリティ系でおすすめの参考資料:

* 安全なウェブサイトの作り方：IPA 独立行政法人 情報処理推進機構
  * https://www.ipa.go.jp/security/vuln/websecurity.html
* HTML5 を利用したWeb アプリケーションのセキュリティ問題に関する調査報告書
  * https://www.jpcert.or.jp/research/html5.html
* HTML5 Security Cheat Sheet - OWASP
  * https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet

## HTTPヘッダーの先祖

「Real World HTTP」"1.4 HTTPの先祖 (1) 電子メール" によるとメールのヘッダーが先祖らしい。

* RFC 733 - Standard for the format of ARPA network text messages
  * https://tools.ietf.org/html/rfc733
  * Obsoleted by: 822
* RFC 822 - STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES
  * https://tools.ietf.org/html/rfc822
  * Obsoleted by 2822
* RFC 2822 - Internet Message Format
  * https://tools.ietf.org/html/rfc2822
  * Obsoleted by: 5322
* RFC 5322 - Internet Message Format
  * https://tools.ietf.org/html/rfc5322

* IANA登録済み Message Header 一覧
  * http://www.iana.org/assignments/message-headers/message-headers.xhtml

## MIMEとContent-Type

* 第一期 : 最初期
  * RFC 1049 - Content-type header field for Internet messages
     * https://tools.ietf.org/html/rfc1049
* 第二期 : MIME (Multipurpose Internet Mail Extensions)として体系化
  * RFC 1341 - MIME (Multipurpose Internet Mail Extensions): Mechanisms for Specifying and Describing the Format of Internet Message Bodies
     * https://tools.ietf.org/html/rfc1341
     * Obsoleted by: 1521
  * RFC 1342 - Representation of Non-ASCII Text in Internet Message Headers
     * https://tools.ietf.org/html/rfc1342
     * Obsoleted by: 1522
* 第三期 : IANA登録など制定
  * RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies
     * https://tools.ietf.org/html/rfc1521
     * Obsoleted by: 2045, 2046, 2047, 2048, 2049
     * Updated by: 1590
  * RFC 1522 - MIME (Multipurpose Internet Mail Extensions) Part Two: Message Header Extensions for Non-ASCII Text
     * https://tools.ietf.org/html/rfc1522
  * RFC 1590 - Media Type Registration Procedure
     * https://tools.ietf.org/html/rfc1590
* 第四期 : 複数Partに統合・分割
  * RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies
     * https://tools.ietf.org/html/rfc2045
  * RFC 2046 - Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types
     * https://tools.ietf.org/html/rfc2046
  * RFC 2047 - MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text
     * https://tools.ietf.org/html/rfc2047
  * RFC 2048 - Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures
     * https://tools.ietf.org/html/rfc2048
  * RFC 2049 - Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples
     * https://tools.ietf.org/html/rfc2049
* 第五期 : 四期のRFCがそれぞれに Update されたり Obsolete されたりして枝分かれしていく。（省略）

* IANA登録済み Media Type 一覧
  * https://www.iana.org/assignments/media-types/media-types.xhtml

## HTTPメソッドとステータスコードの先祖

「Real World HTTP」"1.5 HTTPの先祖 (2) ニュースグループ" によるとHTTPメソッドとステータスコードの機能はニュースグループのNNTPが先祖らしい。

* RFC 850 - Standard for interchange of USENET messages
  * https://tools.ietf.org/html/rfc850
* RFC 977 - Network News Transfer Protocol
  * https://tools.ietf.org/html/rfc977

## URI, URL, URN

* Web Naming and Addressing Overview (URIs, URLs, ...)
  * https://www.w3.org/Addressing/
* URI、URL、URN における問題の解決
  * http://www.ibm.com/developerworks/jp/xml/library/x-urlni/
* URLとURIは何が違うの？ どちらが正しい呼び方？ | 編集長ブログ―安田英久 | Web担当者Forum
  * http://web-tan.forum.impressrd.jp/e/2010/03/09/7539

```
URI : Uniform Resource Identifier (URI)
  -> URN : Uniform Resource Name,　名前を表す。
  -> URL : Uniform Resource Locator, 場所を表す。
```

関連RFC : 現行の標準仕様としては、RFC3986 を参照すれば良い。

* RFC 1738 - Uniform Resource Locators (URL)
  * https://tools.ietf.org/html/rfc1738
  * Updated by: 1808
* RFC 1808 - Relative Uniform Resource Locators
  * https://tools.ietf.org/html/rfc1808
  * 相対URLについて。
  * Obsoleted by: 3986
  * Updated by: 2368, 2396
* RFC 2396 - Uniform Resource Identifiers (URI): Generic Syntax
  * https://tools.ietf.org/html/rfc2396
* RFC 2732 - Format for Literal IPv6 Addresses in URL's
  * https://tools.ietf.org/html/rfc2732
  * Obsoleted by: 3986
  * Updated by: 2732
* RFC 2732 - Format for Literal IPv6 Addresses in URL's
  * https://tools.ietf.org/html/rfc2732
* RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax
  * https://tools.ietf.org/html/rfc3986
* RFC 3987 - Internationalized Resource Identifiers (IRIs)
  * https://tools.ietf.org/html/rfc3987
  * URIを non-ASCII文字:日本語など国際対応するための仕様

### URLと国際化

* RFC 3492 - Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)
  * https://tools.ietf.org/html/rfc3492
* https://www.punycoder.com/

### "mailto" URLスキーム

* RFC 2368 - The mailto URL scheme
  * https://tools.ietf.org/html/rfc2368
  * Obsoleted by: 6068
* RFC 6068 - The 'mailto' URI Scheme
  * https://tools.ietf.org/html/rfc6068

### URLスキームの登録関連

* RFC 2717 - Registration Procedures for URL Scheme Names
  * https://tools.ietf.org/html/rfc2717
  * Obsoleted by: 4395
* RFC 2718 - Guidelines for new URL Schemes
  * https://tools.ietf.org/html/rfc2718
  * Obsoleted by: 4395
  * URLでUTF-8を扱うときのパーセントエンコードについても触れられている。
* RFC 4395 - Guidelines and Registration Procedures for New URI Schemes
  * https://tools.ietf.org/html/rfc4395
  * Obsoleted by: 7595
* RFC 7595 - Guidelines and Registration Procedures for URI Schemes
  * https://tools.ietf.org/html/rfc7595

## パーセントエンコーディング

参考資料:

* URIに使ってよい文字の話 - RFC2396 と RFC3986 - 本当は怖い情報科学
  * http://freak-da.hatenablog.com/entry/20080321/p1
* 9 URI のエスケープ - 情報セキュリティ技術動向調査（2009 年下期）：IPA 独立行政法人 情報処理推進機構
  * https://www.ipa.go.jp/security/fy21/reports/tech1-tg/b_09.html
* 技術/HTTP/URLエンコードで 0x20(スペース) を "+" にすべきか "%20" にすべきか
  * http://www.glamenv-septzen.net/view/1170
* RFC 1866 - The 'text/html' Media Type
  * https://tools.ietf.org/html/rfc1866
  * "Hypertext Markup Language - 2.0" と題されたHTMLの初期仕様で、"8.2 Form Submission" で POST/GETにおける application/x-www-form-urlencodedのパーセントエンコーディングが解説されている。

## HTTP/0.9

* The HTTP Protocol As Implemented In W3
  * http://www.w3.org/Protocols/HTTP/AsImplemented.html

## HTTP/1.0

* RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0
  * https://tools.ietf.org/html/rfc1945

補足: Dateレスポンスヘッダーのフォーマットについて、RFC1945時点では以下の3種類のいずれかとなっている。(10.6  Date -> 3.3  Date/Time Formats 参照)

* RFC 822 - STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES
  * https://tools.ietf.org/html/rfc822
  * Updated by: 1123
  * -> https://tools.ietf.org/html/rfc1123
* RFC 850 - Standard for interchange of USENET messages
  * https://tools.ietf.org/html/rfc850
  * -> obsoleted by RFC 1036
  * https://tools.ietf.org/html/rfc1036
* ANSI C's asctime() format

## HTTP/1.1

* w3cでの動向まとめ
  * https://www.w3.org/Protocols/
* HTTP | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP

* 初期
  * RFC 2068 - Hypertext Transfer Protocol -- HTTP/1.1
     * https://tools.ietf.org/html/rfc2068
* 安定期
  * RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
     * https://tools.ietf.org/html/rfc2616
* 2018年時点で最新
  * RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
     * https://tools.ietf.org/html/rfc7230
  * RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
     * https://tools.ietf.org/html/rfc7231
  * RFC 7232 - Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests
     * https://tools.ietf.org/html/rfc7232
  * RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests
     * https://tools.ietf.org/html/rfc7233
  * RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching
     * https://tools.ietf.org/html/rfc7234
  * RFC 7235 - Hypertext Transfer Protocol (HTTP/1.1): Authentication
     * https://tools.ietf.org/html/rfc7235


新しい補足的なRFC:

* RFC 7236 - Initial Hypertext Transfer Protocol (HTTP) Authentication Scheme Registrations
  * https://tools.ietf.org/html/rfc7236
  * Basic/Bearer/Digest/Negotiate/OAuth 認証スキーマの紹介
* RFC 7237 - Initial Hypertext Transfer Protocol (HTTP) Method Registrations
  * https://tools.ietf.org/html/rfc7237
  * IANAにHTTPメソッドが登録される以前に、別のRFCなどで定義されてたHTTPメソッド一覧
* RFC 7238 - The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect)
  * https://tools.ietf.org/html/rfc7238

### Cookie, Set-Cookie

* HTTP cookies | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

最新の標準としてはRFC6265を見れば良い。

* RFC 2109 - HTTP State Management Mechanism
  * https://tools.ietf.org/html/rfc2109
  * Obsoleted by: 2965
* RFC 2965 - HTTP State Management Mechanism
  * https://tools.ietf.org/html/rfc2965
  * Set-Cookie2 導入
  * Obsoleted by: 6265
* RFC 6265 - HTTP State Management Mechanism
  * https://tools.ietf.org/html/rfc6265
  * Set-Cookie2 がdeprecated

* 歴史と現実の参考：
  * http://www.m-fr.net/etc/cookie.html

### multipart/form-data

* 初期
  * RFC 1867 - Form-based File Upload in HTML
     * https://tools.ietf.org/html/rfc1867
* 二期
  * RFC 2388 - Returning Values from Forms: multipart/form-data
     * https://tools.ietf.org/html/rfc2388
     * Obsoleted by: 7578
* 最新
  * RFC 7578 - Returning Values from Forms: multipart/form-data
     * https://tools.ietf.org/html/rfc7578

※RFC1867 は RFC2854 で Obsoleted されているが、RFC2854自体はそれまで分散していたHTML関連仕様の歴史の整理とW3Cへの引き継ぎを目的としたRFCとなっており、multipart/form-dataについて具体的な解説は無い。代わりに RFC2388 へのリンクを示している。

* RFC 2854 - The 'text/html' Media Type
  * https://tools.ietf.org/html/rfc2854

### Content-Disposition

* メールMIMEとしての Content-Disposition ヘッダー
  * RFC 1806 - Communicating Presentation Information in Internet Messages: The Content-Disposition Header
     * https://tools.ietf.org/html/rfc1806
     * Obsoleted by: 2183
  * RFC 2183 - Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field
     * https://tools.ietf.org/html/rfc2183
     * Updated by: 2184, 2231
  * メールContent-Disposition ヘッダーの最新としては RFC2183 で、文字コードや言語指定などで RFC2184 -> RFC2231 と部分的に更新されているらしい。
  * RFC 2184 - MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations
     * https://tools.ietf.org/html/rfc2184
     * Obsoleted by: 2231
  * RFC 2231 - MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations
     * https://tools.ietf.org/html/rfc2231
* HTTPとしての Content-Disposition ヘッダー
  * RFC 5987 - Character Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters
     * https://tools.ietf.org/html/rfc5987
     * メールMIME側のRFC2231による、ヘッダーにおける文字コードやマルチバイトの扱いがHTTPのヘッダーに導入。
     * Obsoleted by: 8187
  * RFC 6266 - Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)
     * https://tools.ietf.org/html/rfc6266
     * RFC2616 (HTTP/1.1) の "19.5.1 Content-Disposition" で Content-Disposition ヘッダーが言及されているものの、"15.5 Content-Disposition Issues" ではHTTPの標準には含めていなかった。
     * それが RFC6266 において正式に取り込まれたらしい（？）
     * とりあえず HTTP における Content-Disposition としてはこれが2018年時点では最新。
  * RFC 8187 - Indicating Character Encoding and Language for HTTP Header Field Parameters
     * https://tools.ietf.org/html/rfc8187
     * RFC5987 の改訂版

Content-Disposition において、ファイル名に日本語を含めるときの参考:

* Content-Disposition: attachment; filenameのrfc 6266形式 - Qiita
  * https://qiita.com/khsk/items/d541b8dc40bd2c6128d2

JPCERT/CC発行「HTML5 を利用した Web アプリケーションのセキュリティ問題に関する調査報告書 Rev.2」

* https://www.jpcert.or.jp/research/HTML5-20131030.pdf
* p45, "5.5. Content-Disposition" では、IE8でファイルダウンロードの「開く」ボタンクリックによるXSS攻撃を防ぐため、 ` X-Download-Options: noopen` レスポンスヘッダーを追加する対策が紹介されている。

### Referrer Policy

* Referrer Policy
  * https://www.w3.org/TR/referrer-policy/
* Referrer-Policy | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
* Referrer-Policy によるリファラ制御 | blog.jxck.io
  * https://blog.jxck.io/entries/2018-10-08/referrer-policy.html

### Upgrade-Insecure-Requests

* Upgrade Insecure Requests
  * https://www.w3.org/TR/upgrade-insecure-requests/
* 混合コンテンツの防止  |  Web  |  Google Developers
  * https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-content?hl=ja
* Upgrade-Insecure-Requests | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Upgrade-Insecure-Requests

### X-Forwarded

* RFC 7239 - Forwarded HTTP Extension
  * https://tools.ietf.org/html/rfc7239
  * X-Forwarded-By, For, Host, Proto ヘッダー

### X-Frame-Options

* RFC 7034 - HTTP Header Field X-Frame-Options
  * https://tools.ietf.org/html/rfc7034
* X-Frame-Options | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
* JPCERT/CC発行「HTML5 を利用した Web アプリケーションのセキュリティ問題に関する調査報告書 Rev.2」
  * https://www.jpcert.or.jp/research/HTML5-20131030.pdf
  * p41, "5.3. X-Frame-Options" 参照

### X-Content-Type-Options

* IE8 Security Part VI: Beta 2 Update – IEBlog
  * https://blogs.msdn.microsoft.com/ie/2008/09/02/ie8-security-part-vi-beta-2-update/
* X-Content-Type-Options | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
* JPCERT/CC発行「HTML5 を利用した Web アプリケーションのセキュリティ問題に関する調査報告書 Rev.2」
  * https://www.jpcert.or.jp/research/HTML5-20131030.pdf
  * p40, "5.2. X-Content-Type-Options" 参照

### X-XSS-Protection

* X-XSS-Protection | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
* JPCERT/CC発行「HTML5 を利用した Web アプリケーションのセキュリティ問題に関する調査報告書 Rev.2」
  * https://www.jpcert.or.jp/research/HTML5-20131030.pdf
  * p39, "5.1. X-XSS-Protection" 参照

### Content-Security-Policy, Content-Security-Policy-Report-Only

* Content Security Policy (CSP) | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
* Content-Security-Policy | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
* Content-Security-Policy-Report-Only | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
* コンテンツ セキュリティ ポリシー  |  Web  |  Google Developers
  * https://developers.google.com/web/fundamentals/security/csp/?hl=ja
* JPCERT/CC発行「HTML5 を利用した Web アプリケーションのセキュリティ問題に関する調査報告書 Rev.2」
  * https://www.jpcert.or.jp/research/HTML5-20131030.pdf
  * p43, "5.4. Content-Security-Policy" 参照

### Strict-Transport-Security

* RFC 6797 - HTTP Strict Transport Security (HSTS)
  * https://tools.ietf.org/html/rfc6797
* Strict-Transport-Security | MDN
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
* HTTP Strict Transport Security Cheat Sheet - OWASP
  * https://www.owasp.org/index.php/HTTP_Strict_Transport_Security_Cheat_Sheet
* JPCERT/CC発行「HTML5 を利用した Web アプリケーションのセキュリティ問題に関する調査報告書 Rev.2」
  * https://www.jpcert.or.jp/research/HTML5-20131030.pdf
  * p47, "5.6. Strict-Transport-Security" 参照

### Server-Sent Events

* Server-sent events | MDN
  * https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events

## HTTP/2

* HTTP/2
  * https://http2.github.io/
* RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)
  * https://tools.ietf.org/html/rfc7540
* RFC 7541 - HPACK: Header Compression for HTTP/2
  * https://tools.ietf.org/html/rfc7541

## WebSocket

* RFC 6455 - The WebSocket Protocol
  * https://tools.ietf.org/html/rfc6455
  * RFC6455に落ち着くまで紆余曲折があったらしく、draftバージョンで対応が進んだソフトウェアも多いらしい。バージョンについて気にする必要がある場合は、入念な調査が必要そう。
* The WebSocket API (WebSockets) | MDN
  * https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API
* WebSocket | MDN
  * https://developer.mozilla.org/en-US/docs/Web/API/WebSocket

## robots.txt

* robots.txt の仕様  |  検索  |  Google Developers
  * https://developers.google.com/search/reference/robots_txt?hl=ja
* The Web Robots Pages
  * http://www.robotstxt.org/