Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HTTP

Kohei Ota
March 31, 2018
380

 HTTP

Kohei Ota

March 31, 2018
Tweet

More Decks by Kohei Ota

Transcript

  1. お前だれやねん  Inductor(Twitter: _inductor_)  インフラ勉強会でAdminをやっています  4/1からとあるECサイトを運営している会社でサーバーを作ったり いじったりする仕事をします 

    前職(今日まで所属)はWebのバックエンドやAndroidアプリ開発などを やっていました  その前はデータセンター内で運用・監視のSEをやっていました  ただのポンコツエンジニアです
  2. HTTPの誕生とHTTP/0.9  もともとは、CERNで生まれたHTMLを世に届けるためのプロトコル として、科学者が草案を作った(1990年頃)  1991年にHTTP/0.9として産声を上げ、ドキュメント化された  TCP-IPでドメイン/IPアドレスに接続する基本的な部分は全く同じ  デフォルトで使用されるポートも80番だった

     GETリクエストとそのレスポンスのみというシンプルな構成  データをサーバーに送ったり、動的にデータを授受するなどの仕様は 組み込まれていなかった  https://www.w3.org/Protocols/HTTP/AsImplemented.html
  3. RFCの策定とHTTP/1.0  1996年にRFC 1945として仕様が公開された  GET / HEAD / POSTメソッドのサポート

     サーバーにデータを送る仕組みができた  レスポンスにヘッダーの概念が追加された  Content-TypeとかUser-Agentなど、今でも一般的に使われるものができた  ステータスコードが追加された  バージョンの概念が増えたので、プロトコルのバージョンを 明示するようになった 成約が多かった0.9から大きく拡張され、様々なことができるようになった!
  4. HTTP/1.1 “現在の”デファクトスタンダード  1999年にRFC 2068として標準化  HTTPセッションがコネクションごとに切れなくなり、 明示的にCloseしない限り持続するようになった  3-way

    handshakeのオーバーヘッドが大幅に減った  パイプラインが追加され、リクエストごとに待ち時間を 気にしなくてよくなった  PUTやDELETEなどのメソッドが追加された  Hostヘッダが追加され、Virtual Hostという概念が使えるようになった!
  5. 公開鍵認証とは  公開鍵・秘密鍵と呼ばれる2種類の鍵を使った認証方法  公開鍵:みんなに渡す暗号化をかけるための鍵  秘密鍵:サーバーだけが持つ復号化用の鍵  初回リクエスト時に公開鍵を受け取ったクライアントが、情報を公開鍵で 暗号化した上でサーバーに送信→サーバー側は秘密鍵を使って中を見る

     サーバー上にある秘密鍵でしか中身がわからないよ!という仕組み  メリット:どのユーザーに対しても同じ公開鍵を渡せるので、鍵の管理が 楽。秘密鍵をサーバーから盗まれない限りは(理論上)安全  デメリット:クライアント側とサーバー側で異なる鍵を使うため処理が複 雑、また、パフォーマンスも悪い
  6. HTTP/1.1に見える課題  1999年に作られたプロトコル  インターネットの進化の速度から考えると、もう既におじいちゃん  個人情報を扱う201x年において、暗号化通信が非標準  スノーデン事件によって、Full Secureな通信の需要が高まった

     HTTP1.1+TLSにおいても、TLS1.0のような既に非安全となったプロトコルが 未だに横行している  Ref: http://www.intellilink.co.jp/article/pcidss/18.html  不完全なパイプライン  リクエストはどんどん投げることができても、 サーバーはすべて順番通りに返す必要がある  画像や動画などの重いデータがあったり、バックエンドの処理でもたつくと 他のコンテンツを転送するまでに無駄な待ち時間が生じる
  7. HTTP/2!!!  SPDYの最終型であったSPDY/4をさらに進め、RFC 2616として 2015年2月に正式なHTTPプロトコルとして標準化  策定にはGoogleほか、Microsoft、Facebookなどが参画し、 それぞれの提案・フィードバックによって仕様を協議・確定した  サーバープッシュによる新たなユーザー体験(サーバー側から

    動的に情報を通知できる)  イメージとしてはアプリのプッシュ通知をブラウザ上でやるようなもの  Youtubeでチャンネル登録していると最新の動画などが通知されたりする  PWA、SPAなどで利用されるケースが増えている  HTTPのバージョンとしては、実に16年ぶりとなるオフィシャルアップデート  Windows10のIE11ほか、Safari9、Chrome31、Firefox34以降にて標準対応  WebサーバーはWin10のIIS、nginx 1.9.5、Apache 2.4.17以降にて対応
  8. HTTP/2についてまとめると・・・  むっちゃ古いHTTPプロトコルを、後方互換性を維持したまま改善しようと頑張った Googleさんたちの努力の結果  唯一ボトルネックになりうるのがTLS1.2が導入必須であること  古い暗号化方式はわりと捨てている  HTTPS化できない事情がある場合は使えない

     具体的な導入方法は?  OpenSSL 1.0.2以上でコンパイルされたnginx、Apache、Caddy、h2oなどの Webサーバを使ってhttp2のコンフィグを有効化するだけ  NodeJSなどのアプリケーションサーバーでも使えたと思う  パフォーマンスはどうなん?  改善しやすいパターン、そうじゃないパターンがある  通信が複数回に分けて発生するパターンとか、物理的距離によって通信そのものに時間的コストが 生じるパターンなどは改善しがち  国内でシンプルなページを提供するだけのレベルだと、違いはほとんど感じられない  サーバープッシュが要件として含まれている場合は導入必須
  9. QUIC、いい事だらけなの?  まだ標準化は終わっていない(ドラフトが出続けている)  Googleの実装であるgQUICと標準化仕様であるIETF QUICとで現在は完全に 分かれている  お互いに情報交換はしているものの、仕様的な部分でいろいろな違いもある 

    TLS1.3(こちらもまだ標準化未完了)の導入が必須となるため、そちら側の理解も 必要になる  TLS 1.3については、2017年にBluecoatのプロキシとちょっとした事件があったため、 抵抗を感じる人が多いかもしれない  透過性の問題などはまだまだGoogleでも議論が続いていた(という記憶)  TLS1.3においても、従来の暗号化通信で問題になっていたRTTなどの遅延問題が 改善される見込み  で、今はどうなってんの?  今のところ、コア仕様を固めて2018年11までに提出するのが目標  いまいますぐにどうかなるというわけではない
  10. まとめ  HTTPみたいな身近かつ十分成熟したプロトコルも、 実は日々進化するためにいろいろ動きがある  身近な技術の動向をキャッチアップすることも、 インフラエンジニアとしては大事なスキル(を僕は思っている)  QUIC流行れ 

    僕より詳しい人、続きをどうかお願いします  https://speakerdeck.com/shigeki/yun-yong-falseguan-dian- karajian-tatlspurotokorufalsedong-ki  大津さんの資料がすごくよくまとまっていてわかりやすい  flano_yukiさんのブログも良いです!!!