Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

HTTP/2でも初めてみます?

9,958 views

Published on

#TUTLT での発表し量です

Published in: Technology

HTTP/2でも初めてみます?

  1. 1. HTTP/2でも初めてみます? 今回はちゃんと初心者向け
  2. 2. 自己紹介 • 川上 けんと • コンピュータ部 副部長 • Web班 班長 • 趣味 • Emacs • openSUSE • Networkとかとか • Twitter?知らない子ですね.... • http://techack.net
  3. 3. 前回、初心者に知識を求めすぎ るとか言われたので知識が無い 人に知識を詰め込みます
  4. 4. HTTP/2って知ってます?
  5. 5. HTTP/2 • 2015年2月17日に仕様が決定され、2015年5月にRFC7540とし て文書化されたHTTPの新仕様 • Googleが開発していたSPDYを開発した事により、Network- FriendlyなHTTP Upgradeが考え出されはじめた • そのためSPDYの仕様をそのままコピーした最初のドラフトから議論が初 まった • HTTP1.1で動いているサービスはそのまま動く事を目標に作られた
  6. 6. HTTP1.1とHTTP/2の違い ストリーム処理による多重化
  7. 7. HTTP1.1 サバネコClient リクエスト1 リクエスト2 レスポンス1 レスポンス2
  8. 8. HTTP1.1 パイプライン サバネコClient $1 $2 $3 $1 $2 $3
  9. 9. HTTP/2 サバネコClient $1 $2 $3 $3 $1 $2
  10. 10. HTTP/2 サバネコClient $1 $2 $3 $3 $1 $2 サーバ側が 返答する順番を選べる
  11. 11. HTTP1.1とHTTP/2の違い バイナリ化
  12. 12. HTTP/2フレーム Length : ペイロードのオクテット数 Type : フレームの種類、データフレームやヘッダーフレームなどを指す Flags : ストリームの終了やらのフラグ Stream Identifier : 31bitのストリームのID R : 未定義 Frame Payload : タイプによって決められたデータ形式のデータの領域
  13. 13. フレームタイプ Type Name Summary Binary DATA ストリームに関連する任意の可変長オクテット列。 0x0 HEADERS 名前-値のペアを転送する。ストリームの開始に仕様される。 0x1 PRIORITY 送信者からストリームの優先度を指定する。 0x2 RST_STREAM ストリームの即時終了を表す 0x3 SETTINGS エンドポイントの通信方式に影響を与える設定など。 0x4 PUSH_PROMISE サーバにプッシュを行う。 0x5 PING 死活監視やら遅延の測定やらを行う。 0x6 GOAWAY コネクションの終了の開始 0x7 WINDOW_UPDATE フロー制御の指標などを設定する 0x8 CONTINUATION HEADERSやPUSH_PROMISEで足りなかった時に追加で使用される。 0x9
  14. 14. 基本的な通信に必要なフレーム
  15. 15. DATA HTTP1.1などで言うBody部 Pad Length? : Paddingの長さ Data : アプリケーションのデータ、流さはHTTP/2のフレームのLengthから他の流さを引いた長さ Padding : アプリケーションに意味の無いデータ。フレームサイズを良い感じの長さにしたい時に使う
  16. 16. HEADERS HTTP1.1でいうHeader,HPACK形式で圧縮済 Pad Length? : Paddingの長さ E , Stream Dependency? , Weight? : ストリー ムの優先度 Header Block Pragment : HPACKにより圧縮されたHTTPのHeader
  17. 17. SETTINGS Identifier : 設定の種類を表す SETTINGを受けとるとACKを返答するのもSETTINGフレームを用いる 設定内容: ヘッダ圧縮に使用するテーブルサイズや、 サーバからpushを受けとるかどうか 同時にアクティブになってよいストリームの数、 バッファのサイズ、 Gzipの使用などの設定を行う
  18. 18. GOAWAY フレームの最後を表す Last-Stream-ID:処理中の最終ストリームのID Error Code:エラー情報
  19. 19. 簡単なHTTP/2の要求の流れ Client Server コネクションの要求 Setting Setting Ack Setting Setting Ack Headers Headers DATA GOAWAY
  20. 20. バイナリフレーム GET /index.html HTTP/1.1 Host: www.google.com Content-Type: text/html Content-Length:314 {データ} HTTP1.1 リクエスト HEADERS :method GET :scheme http :authority www.google.com :path /index.html :content-type text/html :content-length 314 DATA {データ} HTTP/2フレーム
  21. 21. HTTP/2の良い所ってなに?
  22. 22. HTTP/2のよくある疑問 • HTTP/2ってバイナリだし早いんだよね? • バイナリだから早いって事はない、なんか、最近、HTTP1.1の高速なパーサとか出てるし やり方しだいじゃない? • ダウンロードは早くなるの? • 別にHTTP1.1でaimage.example.comとかでバラバラなサーバに置いてコネクション 数の上限とか突破してるしべつにそんな早くなる事は無いよ!ってか、この方法が HTTP/2では使えなくなるよ! • HTTP1.1だとブラウザさんが無理矢理複数コネクション張りに行ったりするしね!! • じゃぁ実際、何が良いの? • HTTP/2を使うだけでレンダリングの開始までの速度が上るよ! • HTTP/2では優先度設定があるからHTMLとCSSとかを先にダウンロードするようにすれ ばレンダリング開始が早くなるよね!!
  23. 23. HTTP/2のよくある疑問 • HTTP/2にしたら管理コストが上るんじゃないの? • HTTPSを使うのと変らないくらい、今年度中にはApacheもNginxもHTTP/2に 対応すると言ってるのでアップデートするだけで対応出来るはず • HTTP/2にするとセキュリティがあっぷしたりするの? • HTTP1.1で発生する脆弱性は基本動作すると思った方が良い、 • HTTP Headerインジェクションは減るかもしれないけど、HTTP/2によるリバース プロシキなどだとそこも追加してヘッダ圧縮されるかもしれないので実装による • telnetで確認出来ないんだけど!! • そういうものです諦めて
  24. 24. とりあえず使って設定すれば 表示開始が早くなるよ!!
  25. 25. って事でHTTP/2を使ってみよう
  26. 26. h2o • HTTP/2に対応したWebサーバ • 高品質かつ便利なHTTPサーバを実装する事を目標にしてるらしい • Nginxより早いらしい • DeNAが開発してるらしい • GitHubでソースコードが読める • https://github.com/h2o/h2o • 設定ファイルがYAML • リバースプロキシや、mruby対応など今時な機能もある
  27. 27. h2oを使ってみよう • 最新リリースをとってこよう • https://github.com/h2o/h2o/releases • 依存関係のインストール • $ sudo zypper install cmake • $ sudo zypper install libyaml
  28. 28. h2oを使ってみよう • h2oの解答 • $ unzip h2o-1.4.2.zip • h2oのビルド • $ cmake . • $ make h2o
  29. 29. h2oを使ってみよう • h2oの実行 • $ ./h2o –c ./examples/h2o/h2o.conf • Demo
  30. 30. まとめ • HTTP/2を使うのにそんな気構える必要とかないよ! • HTTP1.1で動いてるサービスならWebサーバをアップデートするだけでそのうち勝 手に対応されるはず • HTTP/2を今使うならh2oがお勧め • 現在はまだ完全にチューニングしたNgnixよりは遅いらしいが、普通に早いWeb サーバ • 現状で安定板としてHTTP/2に対応している数少ないWebサーバ • HTTP/2怖くないよ!
  31. 31. TLSを使うのにお金がかかるしHTTP/2とか使えない • オレオレ証明書を作る • $ openssl genrsa 2048 > server.key • $ openssl req -new -key server.key > server.csr • $ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt • これで10年間有効なオレオレ証明書が作れる • 適切な位置にこれを配置すれば暗号化するという目的は完了出きる
  32. 32. TLSを使うのにお金がかかるしHTTP/2とか使えない • 9月まで待てば無料で証明書が発行出来るサービスが開始される • Let's Encrypt • https://letsencrypt.org • Mozillaや、CISCO、Akamaiなどが運営する予定の証明書発行サー ビス • NSAのプリズム計画あたりでネットの監視が問題になって作ろうとなった サービス • 9月の中旬あたりに開始されるらしい

×