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

HTTP

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Kohei Ota Kohei Ota
March 31, 2018
410

 HTTP

Avatar for Kohei Ota

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さんのブログも良いです!!!