[8] HTTP/2 は、旧来の HTTP にかわるものとして新たに開発された転送プロトコルです。 Google によって開発された SPDY が元となっています。
[26] HTTP の通信は、 HTTPサーバーと HTTPクライアントとの間に HTTP接続を確立し、その上でメッセージをやり取りすることで行われます。
[27] HTTP接続内には複数のストリームを開くことができます。 ストリーム上をサーバーからクライアントに、あるいはクライアントからサーバーにとフレームを送信することで、 両者間で制御情報やデータのやり取りを行います。
[28] フレームの列により、要求や応答のメッセージが表されています。 上位のアプリケーションの処理は、要求と応答によって行われます。 フレームにはメッセージを表すものの他、制御情報を表すものもあります。
[29] メッセージの意味 >>25 や個々の構成要素の構文は、 HTTP/1.1 が参照されています。
[30] ストリームやフレームの概念や、メッセージをフレームの列で表現する方法は、 HTTP/2 で新たに規定されました。
[33] HTTP/1.1 はテキストベース、 HTTP/2 はバイナリーベースで、 プロトコルとしての構造はまったく違っています。 そうした表現上の違いや制御情報のやり取りに関する異なりを除くと、 次のような差があります。
[32] HTTP/2 では、 HTTP/1.1 の次の機能は使えません。
[36] HTTP/2 では、 Cookie:
ヘッダーを複数指定できます。
[40] HTTP/2 では、ほとんどの場合 :scheme
疑似ヘッダーが必須です。
[37] HTTP/2 では、原則として Host:
ヘッダーのかわりに
:authority
疑似ヘッダーを使います。
[39] HTTP/2 では、クライアントが要求を送信しサーバーが応答を送信する従来の形のやり取りに加えて、 サーバーが要求と応答をクライアントに送信するサーバープッシュが導入されています。
[19] ALPN の識別子 h2
(0x68, 0x32
) は、
HTTP/2 over TLS を表します >>17, >>34。
[20] Upgrade:
ヘッダーの値 h2c
は、HTTP/2 over TCP を表します >>17, >>34, >>35。 ALPNプロトコル名
h2c
は予約されており、使いません >>17。
Upgrade: h2c
を参照。h2c
がまったく使ってはいけないように書かれていますが、
これがその後拡大された ALPNプロトコル名の用法 (ALPN:
や Alt-Svc:
) にも適用されるのかどうかは不明です。
ALPN:
では、 (理論上は) 使っても良さそうです。
Alt-Svc:
でも、 (理論上は) 使うことができそうですし、
RFC 7838 にも使った場合についての言及があります。
(実際には平文の HTTP/2 など使うこともないでしょうから、問題にはならなそうです。)[18] HTTP/1.1 以下とは違って、要求行や状態行のプロトコルの版に相当するものはありません。
[23] ただしクライアント接続序文は、 HTTP/1.1 のメッセージとして解釈すると、
プロトコルの版 HTTP/2.0
を指定したことになります。
[53] メタ変数 SERVER_PROTOCOL
でも HTTP/2.0
という値が使われることがあります
(HTTP/2
を使う実装もあります)。
[54] curl の --dump-header
オプションで応答ヘッダーを出力すると、
プロトコルの版は HTTP/2
となります。
[16] HTTP/2 では、 http:
/https:
URL scheme を使います >>17。 URL だけから HTTP/2
と HTTP/1.1 以下を区別することはできません。
[57]
HTTP/0.9 が HTTP と呼ばれていた頃、
HTTP/1.0 に結実する新仕様案が HTTP2
と呼ばれていました。
[9] これまで HTTP/1.1 に大きな変更を加える提案としては、 HTTP/1.2、PEP、RFC 2774 といった機能拡張のための機能を追加するもの、 WAP のようにバイナリー化するもの、 GridHTTP や Reverse HTTP のように特定の用法のために拡張するものなど色々ありましたが、 いずれも主流となることはできず、やがて消えてゆきました。
[10] HTTP には大きな変更が加えられることなく10年が過ぎようとしており、 RFC の改訂 (RFC 723x) はともかく、プロトコルへの変更は最早不可能との観測もありました。
[11] しかし Google が Web の高速化施策の1つとして SPDY を提案し Google Chrome や各 Google サービスのサーバーに実装したことで、 この流れは大きく変わります。
[1] Rechartering HTTPbis (Mark Nottingham 著, 版) http://lists.w3.org/Archives/Public/ietf-http-wg/2012JanMar/0098.html
$ telnet mail.kamu.ct.tr 80 Trying 212.175.153.6... Connected to mail.kamu.ct.tr. Escape character is '^]'. GET / HTTP/1.0 HTTP/2.0 302 Found Server: SmarterTools/2.0.2692.18364 Date: Wed, 05 Mar 2014 09:02:07 GMT X-AspNet-Version: 2.0.50727 Location: /Login.aspx Set-Cookie: ASP.NET_SessionId=1dmqmiv3plhasn45ayqi2155; path=/; HttpOnly Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Length: 130 Connection: Close <html><head><title>Object moved</title></head><body> <h2>Object moved to <a href="%2fLogin.aspx">here</a>.</h2> </body></html>
[3] draft-montenegro-httpbis-http2-negotiation-01 - HTTP 2.0 Negotiation ( ( 版)) http://tools.ietf.org/html/draft-montenegro-httpbis-http2-negotiation-01
[4] IRC logs: freenode / #whatwg / 20141210 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20141210#l-637
[5] HTTP/2 – Closing on the Final Design | MS OpenTech ( ( 版)) http://msopentech.com/blog/2014/01/31/http2-moving-quickly-endgame/
[6] HTTP/2 – “Nearing Completion” | MS Open Tech ( ( 版)) http://msopentech.com/blog/2014/03/19/http2-nearing-completion/
[7] Chromium Blog: Hello HTTP/2, Goodbye SPDY ( ( 版)) http://blog.chromium.org/2015/02/hello-http2-goodbye-spdy-http-is_9.html
[13] HTTP2 時代のサーバサイドアーキテクチャ考察 - Block Rockin’ Codes ( 版) http://jxck.hatenablog.com/entry/http2-server-side-architecture
[24] RFC 7540 は、2015年出版と新しい仕様書で、過去の HTTP 仕様に比べればかなり明確に細かな挙動が規定されています。エラー処理もほとんどの場合が明文化されています。 その一方で、要件の一部しか RFC 2119 助動詞で記述されておらず、 要件らしきものが事実の文でしかなかったり、助動詞によって記述された要件で内容が同じとみられるものが仕様書の複数の箇所に重出したりと、 前近代的な部分もなお残っています。近年の Web 関連仕様のようなアルゴリズムによる規定の記述を行っていないので、 正常処理やエラー処理の規定の適用順序が明確になっていないことも多いようです。
[41] 1047594 – Enable http/2 (and alpn) by default ( 版) https://bugzilla.mozilla.org/show_bug.cgi?id=1047594
[42] Bits Up!: HTTP/2 is Live in Firefox ( 版) http://bitsup.blogspot.jp/2015/02/http2-is-live-in-firefox.html
[43] Issue 408944 - chromium - Chromium h2-14 and twitter.com interop PROTOCOL_ERROR - An open-source project to help move the web forward. - Google Project Hosting ( 版) https://code.google.com/p/chromium/issues/detail?id=408944
[44] Issue 345769 - chromium - Full HTTP/2 support - An open-source project to help move the web forward. - Google Project Hosting ( 版) https://code.google.com/p/chromium/issues/detail?id=345769
[51] mod_http2 - Apache HTTP Server Version 2.4 ( ()) https://httpd.apache.org/docs/2.4/mod/mod_http2.html
[55] HTTP/2 with curl, , https://curl.haxx.se/docs/http2.html
[56] HTTP/2 Fully Supported in NGINX Plus | NGINX () https://www.nginx.com/blog/http2-r7/