HTTP/2について調べてみた。
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>HTTP]]
--HTTP/2について調べてみた。
--[[HTTP/3について調べてみた。]]
* 目次 [#p81134bf]
#contents
*概要 [#y00c5f0c]
[[gRPC]]を調べようと思っていたら、HTTP/2なるキーワードが。~
「そういや話題になっていたなぁ。」などと思い少々調査して...
**HTTP/2とは [#ea97bc41]
-2015年2月17日に正式な仕様として承認
-2015年5月に RFC 7540 として文書化
-HTTP/1.1が1999年6月に RFC 2616 として~
規定されて以来16年ぶりのバージョンアップ。
***経緯 [#t791f29c]
-米GoogleによるWeb高速化の「SPDY」プロトコルが生み出され...
-有名サイトも次々と「SPDY」を取り入れるようになった。
-標準化団体IETFによって標準化が進められ、RFC(RFC7540, HT...
***目的 [#oc425ef6]
[[HTTPの高速化>#of2d9169]]
***方法 [#q4c4e73a]
[[ストリーム>#oa0a4305]]という仕組みを使用する。
***プロトコル [#de48165e]
-既存のHTTPと互換性を保ちながらセッション層を効率化する。
-そのため、HTTPの表面上の機能はそのままに、内部動作だけを...
***今後 [#hf63d668]
-まだ、十分な実績がないので、検証中のプロトコル。
--HTTP/1.1に置き換わるのか?
--一部の仕様だけが生き残るのか?
-HTTP/2はTCP/IP上で動作するため、品質の低い回線上で実行し...
パケット遅延、パケットロスなどで全体遅延になる問題がある。
--このため、米Googleは「QUIC」というUDP上でHTTPを処理する...
--「QUIC」も「SPDY」と同様に、IETFを通じた標準化を目指し...
**HTTPの高速化 [#of2d9169]
***通信・接続の多重化 [#q611c4c3]
-HTTPでは、1つのリクエストが完了するまで、次のリクエスト...
-現在、多くのブラウザは1ドメインへの接続を同時に複数行い...
-ただし、HTTP/1.1の仕様としては2つまでとされている。
***HTTPパイプラインとHoL(Head of Line)ブロッキング [#ob...
-HTTPパイプライン
--HTTP/1.1から、前回リクエストの完了を待たずに次のリクエ...
--しかし、実装の困難さから、HTTPパイプラインを正しく実装...
--故に、現在ほとんどのブラウザはHTTPパイプライン機能を全...
-HoL(Head of Line)ブロッキング
--HTTPパイプラインには、「サーバはリクエストの順番通りに...
--これは、「先頭のリクエストの処理に時間がかかる場合、後...
***リソース読み込みを速くする様々な工夫 [#ia4d1120]
-リソースの結合
--CSSやJSファイルを1つに結合するテクニック
--ASP.NETでは[[Bundle機能>https://techinfoofmicrosofttech...
-画像のインライン埋め込み~
HTML内にbase64でエンコードした画像を直接埋め込む方法
img src="data:image/gif;base64,(・・・base64文字列・・...
-ドメインシャーディング
--多重化には、[[前述の制限>#q611c4c3]]がある。
--この制限を搔い潜るためリソースファイルの取得先ドメイン...
--ベターユース的には、
---著名なライブラリの取得は[[CDN>CDN(Content Delivery Ne...
---なお、[[CDN>CDN(Content Delivery Network)]]ダウン時...
**HTTP/2のストリーム [#oa0a4305]
-1つのTCP/IPコネクション上でリクエスト・レスポンスを並列...
-ストリームの多重化によりHoLブロッキングの問題は解決する。
***フレーム [#u2b4733e]
-並列化のためフレーム
--各ストリームにおけるメッセージのやり取りはフレームとい...
--フレームはバイナリで定義され、各フレームは9オクテットの...
-PRIORITYフレーム
--クライアントがPRIORITYフレームを用いてストリーム間に優...
--優先順位付けの方法には、「重み付け」と「依存関係」の2つ...
***ストリームのID [#j6787cc6]
-ストリームはクライアント、サーバのどちらからでも開始でき...
-競合回避のため、
--クライアント側から開始したストリームには奇数のIDを割り...
--サーバ側から開始したストリームには偶数のIDを割り当てる。
***ウインドウ制御 [#q5824ff4]
-TCP/IPでも実装されているようなウインドウ制御を実装してい...
-HTTP/2で実装する理由は、
--TCP/IPコネクションを並列化しているため。
--並列化した中の個別のストリームの制御を行う。
--例:動画のストリーミング中に、そのストリームのみ停止す...
***ヘッダ圧縮 [#u3341193]
従来、HTTPのコンテンツボディのみをgzip圧縮していたが、HTT...
-ストリーム内のHTTPヘッダも圧縮する。
-圧縮には、gzipではなく、HPACKを使用する。~
CRIMEというgzip圧縮の特性に着目して、~
SSL暗号を無効化する攻撃手法を回避するため。
***サーバプッシュ [#j55026d6]
サーバ側からクライアントにデータをプッシュできる。
-具体的に言えば、リクエストされたページに必要なリソースを...
-使用例としては、HTMLに関連付けられているCSSや画像などの...
*使い方 [#ie10393f]
**コンテンツ側 [#c78c9044]
内部動作だけを置き換えるので、コンテンツ側は何もしなくて...
**サーバープッシュ [#ve84f1e0]
[[サーバプッシュ>#j55026d6]]を使用する場合だけ、コンテン...
***[[ASP.NET]] [#afaaf6f3]
-[[ASP.NET Web Forms]]でサーバープッシュを使用する場合、~
サーバー側で以下のメソッドを実行して予めコンテンツをプッ...
Response.PushPromise("~/・・・コンテンツの仮想パス")
-[[ASP.NET MVC]]でサーバープッシュを使用する場合、~
[[以下に>#i2f0846e]]、URLヘルパに拡張メソッドとして実装し...
(故にUrl.PushContentとか、UrlHelper.PushContentで検索し...
***参考 [#i2f0846e]
-IIS 10.0 と ASP.NET 4.6 で HTTP/2 のサーバープッシュが使...
http://blog.shibayan.jp/entry/20150506/1430846908
*サポート状況 [#bf97dc22]
**[[IIS]] [#gfbab78b]
[[IIS]]というか、http.sys(HTTP カーネル モード ドライバ...
***参考 [#r5eceb7e]
-IISのhttp2サポートについてちょっとだけ - Qiita~
http://qiita.com/matarillo/items/ebf667994bcdf7feee33
--Windows Server Technical Preview の IIS というか http.s...
http://blog.shibayan.jp/entry/20141006/1412601973
--Windows Server Technical Preview の IIS というか http.s...
http://blog.shibayan.jp/entry/20141007/1412662459
--Windows Server Technical Preview 2 と ARR 3.0 を組み合...
http://blog.shibayan.jp/entry/20150701/1435717724
**.NET [#jf7774aa]
-.NET 2015(.NET Framework 4.6および.NET Core)から、サポ...
-従って、当該バージョン以降の[[ASP.NET]] & [[HTTPClient>H...
***参考 [#xa75a0d4]
-c# - How to make the .net HttpClient use http 2.0? - Sta...
http://stackoverflow.com/questions/32685151/how-to-make-t...
-What's New in the .NET Framework~
https://msdn.microsoft.com/en-us/library/ms171868.aspx
**その他 [#hc74c9dd]
***サーバー [#hf60b91e]
[[IIS]], Apache, nginx等の主要なサーバーで、サポートされ...
***クライアント [#y23f835a]
-主要なブラウザで、HTTP/2 over TLSでサポートされている模...
-IE11を含むが、Win10上のIE11に限定される模様。
***参考 [#z4e9b171]
-Implementations · http2/http2-spec Wiki~
https://github.com/http2/http2-spec/wiki/Implementations
*参考 [#l425f0f4]
-HTTP/2 - Wikipedia~
https://ja.wikipedia.org/wiki/HTTP/2
-「HTTP/2」がついに登場! 開発者が知っておきたい~
通信の仕組み・新機能・導入方法 (1/3):CodeZine(コードジ...
https://codezine.jp/article/detail/8663
**ITpro [#t8968dd3]
-検証!HTTP/2~
http://itpro.nikkeibp.co.jp/atcl/column/17/041200137/
--企業Webサイトに導入必須なHTTP/2の正体~
http://itpro.nikkeibp.co.jp/atcl/column/17/041200137/0412...
--Webの高速アクセスを1本のコネクションで実現~
http://itpro.nikkeibp.co.jp/atcl/column/17/041200137/0412...
--HTTP/2はどうしてコネクション一つで通信できるのか~
http://itpro.nikkeibp.co.jp/atcl/column/17/041200137/0412...
--高速HTTP/2通信の利用には“スイッチ”が必要~
http://itpro.nikkeibp.co.jp/atcl/column/17/041200137/0412...
**Publickey [#r3b6e332]
-Developers Summit 2016~奥一穂氏による「HTTPとサーバ技術...
--(前編)レイテンシに負けないプロトコルとして登場したHTT...
https://www.publickey1.jp/blog/16/http2httpdevelopers_sum...
--(中編)リクエストを待たずに送信を開始する「サーバプッ...
https://www.publickey1.jp/blog/16/httpdevelopers_summit_2...
--(後編)HTTPS化もHTTP/2にすれば負荷を下げられる~
https://www.publickey1.jp/blog/16/httpshttp2httpdeveloper...
----
Tags: [[:IT国際標準]], [[:通信技術]], [[:IIS]], [[:.NET開...
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>HTTP]]
--HTTP/2について調べてみた。
--[[HTTP/3について調べてみた。]]
* 目次 [#p81134bf]
#contents
*概要 [#y00c5f0c]
[[gRPC]]を調べようと思っていたら、HTTP/2なるキーワードが。~
「そういや話題になっていたなぁ。」などと思い少々調査して...
**HTTP/2とは [#ea97bc41]
-2015年2月17日に正式な仕様として承認
-2015年5月に RFC 7540 として文書化
-HTTP/1.1が1999年6月に RFC 2616 として~
規定されて以来16年ぶりのバージョンアップ。
***経緯 [#t791f29c]
-米GoogleによるWeb高速化の「SPDY」プロトコルが生み出され...
-有名サイトも次々と「SPDY」を取り入れるようになった。
-標準化団体IETFによって標準化が進められ、RFC(RFC7540, HT...
***目的 [#oc425ef6]
[[HTTPの高速化>#of2d9169]]
***方法 [#q4c4e73a]
[[ストリーム>#oa0a4305]]という仕組みを使用する。
***プロトコル [#de48165e]
-既存のHTTPと互換性を保ちながらセッション層を効率化する。
-そのため、HTTPの表面上の機能はそのままに、内部動作だけを...
***今後 [#hf63d668]
-まだ、十分な実績がないので、検証中のプロトコル。
--HTTP/1.1に置き換わるのか?
--一部の仕様だけが生き残るのか?
-HTTP/2はTCP/IP上で動作するため、品質の低い回線上で実行し...
パケット遅延、パケットロスなどで全体遅延になる問題がある。
--このため、米Googleは「QUIC」というUDP上でHTTPを処理する...
--「QUIC」も「SPDY」と同様に、IETFを通じた標準化を目指し...
**HTTPの高速化 [#of2d9169]
***通信・接続の多重化 [#q611c4c3]
-HTTPでは、1つのリクエストが完了するまで、次のリクエスト...
-現在、多くのブラウザは1ドメインへの接続を同時に複数行い...
-ただし、HTTP/1.1の仕様としては2つまでとされている。
***HTTPパイプラインとHoL(Head of Line)ブロッキング [#ob...
-HTTPパイプライン
--HTTP/1.1から、前回リクエストの完了を待たずに次のリクエ...
--しかし、実装の困難さから、HTTPパイプラインを正しく実装...
--故に、現在ほとんどのブラウザはHTTPパイプライン機能を全...
-HoL(Head of Line)ブロッキング
--HTTPパイプラインには、「サーバはリクエストの順番通りに...
--これは、「先頭のリクエストの処理に時間がかかる場合、後...
***リソース読み込みを速くする様々な工夫 [#ia4d1120]
-リソースの結合
--CSSやJSファイルを1つに結合するテクニック
--ASP.NETでは[[Bundle機能>https://techinfoofmicrosofttech...
-画像のインライン埋め込み~
HTML内にbase64でエンコードした画像を直接埋め込む方法
img src="data:image/gif;base64,(・・・base64文字列・・...
-ドメインシャーディング
--多重化には、[[前述の制限>#q611c4c3]]がある。
--この制限を搔い潜るためリソースファイルの取得先ドメイン...
--ベターユース的には、
---著名なライブラリの取得は[[CDN>CDN(Content Delivery Ne...
---なお、[[CDN>CDN(Content Delivery Network)]]ダウン時...
**HTTP/2のストリーム [#oa0a4305]
-1つのTCP/IPコネクション上でリクエスト・レスポンスを並列...
-ストリームの多重化によりHoLブロッキングの問題は解決する。
***フレーム [#u2b4733e]
-並列化のためフレーム
--各ストリームにおけるメッセージのやり取りはフレームとい...
--フレームはバイナリで定義され、各フレームは9オクテットの...
-PRIORITYフレーム
--クライアントがPRIORITYフレームを用いてストリーム間に優...
--優先順位付けの方法には、「重み付け」と「依存関係」の2つ...
***ストリームのID [#j6787cc6]
-ストリームはクライアント、サーバのどちらからでも開始でき...
-競合回避のため、
--クライアント側から開始したストリームには奇数のIDを割り...
--サーバ側から開始したストリームには偶数のIDを割り当てる。
***ウインドウ制御 [#q5824ff4]
-TCP/IPでも実装されているようなウインドウ制御を実装してい...
-HTTP/2で実装する理由は、
--TCP/IPコネクションを並列化しているため。
--並列化した中の個別のストリームの制御を行う。
--例:動画のストリーミング中に、そのストリームのみ停止す...
***ヘッダ圧縮 [#u3341193]
従来、HTTPのコンテンツボディのみをgzip圧縮していたが、HTT...
-ストリーム内のHTTPヘッダも圧縮する。
-圧縮には、gzipではなく、HPACKを使用する。~
CRIMEというgzip圧縮の特性に着目して、~
SSL暗号を無効化する攻撃手法を回避するため。
***サーバプッシュ [#j55026d6]
サーバ側からクライアントにデータをプッシュできる。
-具体的に言えば、リクエストされたページに必要なリソースを...
-使用例としては、HTMLに関連付けられているCSSや画像などの...
*使い方 [#ie10393f]
**コンテンツ側 [#c78c9044]
内部動作だけを置き換えるので、コンテンツ側は何もしなくて...
**サーバープッシュ [#ve84f1e0]
[[サーバプッシュ>#j55026d6]]を使用する場合だけ、コンテン...
***[[ASP.NET]] [#afaaf6f3]
-[[ASP.NET Web Forms]]でサーバープッシュを使用する場合、~
サーバー側で以下のメソッドを実行して予めコンテンツをプッ...
Response.PushPromise("~/・・・コンテンツの仮想パス")
-[[ASP.NET MVC]]でサーバープッシュを使用する場合、~
[[以下に>#i2f0846e]]、URLヘルパに拡張メソッドとして実装し...
(故にUrl.PushContentとか、UrlHelper.PushContentで検索し...
***参考 [#i2f0846e]
-IIS 10.0 と ASP.NET 4.6 で HTTP/2 のサーバープッシュが使...
http://blog.shibayan.jp/entry/20150506/1430846908
*サポート状況 [#bf97dc22]
**[[IIS]] [#gfbab78b]
[[IIS]]というか、http.sys(HTTP カーネル モード ドライバ...
***参考 [#r5eceb7e]
-IISのhttp2サポートについてちょっとだけ - Qiita~
http://qiita.com/matarillo/items/ebf667994bcdf7feee33
--Windows Server Technical Preview の IIS というか http.s...
http://blog.shibayan.jp/entry/20141006/1412601973
--Windows Server Technical Preview の IIS というか http.s...
http://blog.shibayan.jp/entry/20141007/1412662459
--Windows Server Technical Preview 2 と ARR 3.0 を組み合...
http://blog.shibayan.jp/entry/20150701/1435717724
**.NET [#jf7774aa]
-.NET 2015(.NET Framework 4.6および.NET Core)から、サポ...
-従って、当該バージョン以降の[[ASP.NET]] & [[HTTPClient>H...
***参考 [#xa75a0d4]
-c# - How to make the .net HttpClient use http 2.0? - Sta...
http://stackoverflow.com/questions/32685151/how-to-make-t...
-What's New in the .NET Framework~
https://msdn.microsoft.com/en-us/library/ms171868.aspx
**その他 [#hc74c9dd]
***サーバー [#hf60b91e]
[[IIS]], Apache, nginx等の主要なサーバーで、サポートされ...
***クライアント [#y23f835a]
-主要なブラウザで、HTTP/2 over TLSでサポートされている模...
-IE11を含むが、Win10上のIE11に限定される模様。
***参考 [#z4e9b171]
-Implementations · http2/http2-spec Wiki~
https://github.com/http2/http2-spec/wiki/Implementations
*参考 [#l425f0f4]
-HTTP/2 - Wikipedia~
https://ja.wikipedia.org/wiki/HTTP/2
-「HTTP/2」がついに登場! 開発者が知っておきたい~
通信の仕組み・新機能・導入方法 (1/3):CodeZine(コードジ...
https://codezine.jp/article/detail/8663
**ITpro [#t8968dd3]
-検証!HTTP/2~
http://itpro.nikkeibp.co.jp/atcl/column/17/041200137/
--企業Webサイトに導入必須なHTTP/2の正体~
http://itpro.nikkeibp.co.jp/atcl/column/17/041200137/0412...
--Webの高速アクセスを1本のコネクションで実現~
http://itpro.nikkeibp.co.jp/atcl/column/17/041200137/0412...
--HTTP/2はどうしてコネクション一つで通信できるのか~
http://itpro.nikkeibp.co.jp/atcl/column/17/041200137/0412...
--高速HTTP/2通信の利用には“スイッチ”が必要~
http://itpro.nikkeibp.co.jp/atcl/column/17/041200137/0412...
**Publickey [#r3b6e332]
-Developers Summit 2016~奥一穂氏による「HTTPとサーバ技術...
--(前編)レイテンシに負けないプロトコルとして登場したHTT...
https://www.publickey1.jp/blog/16/http2httpdevelopers_sum...
--(中編)リクエストを待たずに送信を開始する「サーバプッ...
https://www.publickey1.jp/blog/16/httpdevelopers_summit_2...
--(後編)HTTPS化もHTTP/2にすれば負荷を下げられる~
https://www.publickey1.jp/blog/16/httpshttp2httpdeveloper...
----
Tags: [[:IT国際標準]], [[:通信技術]], [[:IIS]], [[:.NET開...
ページ名: