Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HTTP
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kohei Ota
March 31, 2018
420
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
HTTP
Kohei Ota
March 31, 2018
More Decks by Kohei Ota
See All by Kohei Ota
CloudNative Meets WebAssembly: Exploring Wasm's Potential to Replace Containers
inductor
4
3.5k
The Cloud Native Chronicles: 10 Years of Community Growth Inside and Outside Japan
inductor
0
180
Cracking the KubeCon CfP
inductor
2
880
KubeCon Recap -Platform migration at Scale-
inductor
1
1.1k
コンテナビルド最新事情 2022年度版 / Container Build 2022
inductor
3
600
データベースとストレージのレプリケーション入門 / Intro-of-database-and-storage-replication
inductor
28
6.6k
KubeConのケーススタディから振り返る、Platform for Platforms のあり方と その実践 / Lessons from KubeCon case studies: Platform for Platforms and its practice
inductor
3
980
オンラインの技術カンファレンスを安定稼働させるための取り組み / SRE activity for online conference platform
inductor
1
1.4k
Kubernetesネットワーキング初級者脱出ガイド / Kubernetes networking beginner's guide
inductor
22
7.6k
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
610
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
The Limits of Empathy - UXLibs8
cassininazir
1
350
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Thoughts on Productivity
jonyablonski
76
5.2k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
sira's awesome portfolio website redesign presentation
elsirapls
0
280
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
From π to Pie charts
rasagy
0
200
Design in an AI World
tapps
1
230
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Scaling GitHub
holman
464
140k
Transcript
HTTPの歴史とこれから インフラ屋として何を対応しなければならないか考えてみる 「HTTPのこと、わかってる?」って美少女に言われたら興奮する? いやしないか・・・ @インフラ勉強会 BY INDUCTOR
お前だれやねん Inductor(Twitter: _inductor_) インフラ勉強会でAdminをやっています 4/1からとあるECサイトを運営している会社でサーバーを作ったり いじったりする仕事をします
前職(今日まで所属)はWebのバックエンドやAndroidアプリ開発などを やっていました その前はデータセンター内で運用・監視のSEをやっていました ただのポンコツエンジニアです
HTTPってなんだっけ?
HTTPってなに? HyperText Transfer Protocol(ハイパーテキスト転送プロトコル)の略称 HTMLやXMLなどの”マークアップ言語”で記述された 「ハイパーテキスト」を転送するために作られたプロトコル データの中身が重要なので、TCPで通信する
現在ではその高い汎用性から、画像や音声など、 様々なデータのやり取りにも応用して利用されている
HTTPの歴史と進化
HTTPの誕生とHTTP/0.9 もともとは、CERNで生まれたHTMLを世に届けるためのプロトコル として、科学者が草案を作った(1990年頃) 1991年にHTTP/0.9として産声を上げ、ドキュメント化された TCP-IPでドメイン/IPアドレスに接続する基本的な部分は全く同じ デフォルトで使用されるポートも80番だった
GETリクエストとそのレスポンスのみというシンプルな構成 データをサーバーに送ったり、動的にデータを授受するなどの仕様は 組み込まれていなかった https://www.w3.org/Protocols/HTTP/AsImplemented.html
RFCの策定とHTTP/1.0 1996年にRFC 1945として仕様が公開された GET / HEAD / POSTメソッドのサポート
サーバーにデータを送る仕組みができた レスポンスにヘッダーの概念が追加された Content-TypeとかUser-Agentなど、今でも一般的に使われるものができた ステータスコードが追加された バージョンの概念が増えたので、プロトコルのバージョンを 明示するようになった 成約が多かった0.9から大きく拡張され、様々なことができるようになった!
HTTP/1.1 “現在の”デファクトスタンダード 1999年にRFC 2068として標準化 HTTPセッションがコネクションごとに切れなくなり、 明示的にCloseしない限り持続するようになった 3-way
handshakeのオーバーヘッドが大幅に減った パイプラインが追加され、リクエストごとに待ち時間を 気にしなくてよくなった PUTやDELETEなどのメソッドが追加された Hostヘッダが追加され、Virtual Hostという概念が使えるようになった!
HTTPS(HTTP over SSL/TLS)の登場 HTTPSは、HTTPをもとにした新しいプロトコル・・・というわけではなく、 HTTP通信を、その下のレイヤにあるSSL/TLSという暗号化技術で秘匿化す るマルチレイヤにまたがった通信方式 既存のHTTPプロトコルを”置き換える”のではなく、 SSLのレイヤで被せているだけ
SSLのエンドポイント間において通信を暗号化することにより、 中継区間でのデータ改竄や盗聴などを防ぐ
SSLの簡単なしくみ 公開鍵認証と共通鍵認証のハイブリッド 最初の鍵交換時のみ公開鍵を使う 接続確立後はクライアントごとに独立の 共通鍵で通信する SSHでよく使われる鍵認証は公開鍵認証
画像引用元: http://www.netsurf.ad.jp/hojin/sv/namae_de_web/ssl_opt.html
公開鍵認証とは 公開鍵・秘密鍵と呼ばれる2種類の鍵を使った認証方法 公開鍵:みんなに渡す暗号化をかけるための鍵 秘密鍵:サーバーだけが持つ復号化用の鍵 初回リクエスト時に公開鍵を受け取ったクライアントが、情報を公開鍵で 暗号化した上でサーバーに送信→サーバー側は秘密鍵を使って中を見る
サーバー上にある秘密鍵でしか中身がわからないよ!という仕組み メリット:どのユーザーに対しても同じ公開鍵を渡せるので、鍵の管理が 楽。秘密鍵をサーバーから盗まれない限りは(理論上)安全 デメリット:クライアント側とサーバー側で異なる鍵を使うため処理が複 雑、また、パフォーマンスも悪い
共通鍵認証とは 暗号化・復号化に同じ鍵を用いる暗号方式 一般的な普通の物理的な鍵と同じ みんなで同じ鍵を使うとみんながデータを見れてやばいので、普通はクラ イアントごとに別々の鍵を生成して管理する メリット:鍵の種類が1つなので計算速度が速い
デメリット:クライアントが増える毎に鍵の数が多くなるので管理が大変。 また、共通鍵を最初に渡すときに情報が盗まれてしまうと、復号されてし まうのでやばい
改めて、SSLの簡単なしくみ 公開鍵認証と共通鍵認証のハイブリッド 最初の鍵交換時のみ公開鍵を使う 接続確立後はクライアントごとに独立の 共通鍵で通信する SSHでよく使われる鍵認証は公開鍵認証
画像引用元: http://www.netsurf.ad.jp/hojin/sv/namae_de_web/ssl_opt.html
現状におけるHTTPの問題点と これから起こるであろう動きについて
HTTP/1.1に見える課題 1999年に作られたプロトコル インターネットの進化の速度から考えると、もう既におじいちゃん 個人情報を扱う201x年において、暗号化通信が非標準 スノーデン事件によって、Full Secureな通信の需要が高まった
HTTP1.1+TLSにおいても、TLS1.0のような既に非安全となったプロトコルが 未だに横行している Ref: http://www.intellilink.co.jp/article/pcidss/18.html 不完全なパイプライン リクエストはどんどん投げることができても、 サーバーはすべて順番通りに返す必要がある 画像や動画などの重いデータがあったり、バックエンドの処理でもたつくと 他のコンテンツを転送するまでに無駄な待ち時間が生じる
Google「もっとがんばってこ??」
SPDY(スピーディ)の登場 2012年頃にGoogleが提唱した、HTTP1.xをラップする新しい通信プロトコル ストリームを仮想的に多重化し、今まで順番に通信せざるを得なかった 不完全なパイプラインを一気に通信できるようにした ヘッダ部分をテキストからバイナリに変更、さらに圧縮し、 データ部ではない部分によって発生する余計な通信量を減らした
(SPDYそのものの仕組み上はいらないけど実装上そうなっている) TLS1.2による暗号化通信が必須 2015年には軒並みブラウザでの対応が完了 モバイル市場においても、Android3、iOS8において対応済み IE11すら対応
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以降にて対応
HTTP/2についてまとめると・・・ むっちゃ古いHTTPプロトコルを、後方互換性を維持したまま改善しようと頑張った Googleさんたちの努力の結果 唯一ボトルネックになりうるのがTLS1.2が導入必須であること 古い暗号化方式はわりと捨てている HTTPS化できない事情がある場合は使えない
具体的な導入方法は? OpenSSL 1.0.2以上でコンパイルされたnginx、Apache、Caddy、h2oなどの Webサーバを使ってhttp2のコンフィグを有効化するだけ NodeJSなどのアプリケーションサーバーでも使えたと思う パフォーマンスはどうなん? 改善しやすいパターン、そうじゃないパターンがある 通信が複数回に分けて発生するパターンとか、物理的距離によって通信そのものに時間的コストが 生じるパターンなどは改善しがち 国内でシンプルなページを提供するだけのレベルだと、違いはほとんど感じられない サーバープッシュが要件として含まれている場合は導入必須
So, what will happen in the nearly future?
HTTP/2の限界 HTTP/2では互換性が重視されたが故に導入しなかった新しい考え方も多い HTTPプロトコルの構造そのものが古い そもそもTCPベースの時点で遅い どんなにトラフィックをさばけるようにNWの部分を増強しても パフォーマンスの改善に限界があるため、通信のボトルネックに
なっているRTT(Round Trip Time)の部分をどう改善する?
Google「じゃあTCPやめたろww」
QUICプロトコルの登場 Googleが2013年から開発している新しい通信プロトコル TCPより圧倒的に速いUDPをベースとして、データの整合性チェックや暗 号化などを含め、HTTP/2が有している機能をすべてQUICとして再実装 (!?)
ただ速いだけじゃないQUIC UDP上でセッションIDを管理するため、IPアドレスが変わろうが セッションIDが復元できる(モバイル通信やWiFiアクセスポイント 切り替えなどに強い) UDPの上のレイヤをすべて自前で実装しているので、最初のACKとかも 全部暗号化できる TCPとかいう激遅プロトコルを改善するという試みからの開放
OSのTCPライブラリがどうとかどうでもよくなる LINEとかAkamaiも既に導入事例を作っていて、パフォーマンスの改善が 報告されている
QUIC、いい事だらけなの? まだ標準化は終わっていない(ドラフトが出続けている) Googleの実装であるgQUICと標準化仕様であるIETF QUICとで現在は完全に 分かれている お互いに情報交換はしているものの、仕様的な部分でいろいろな違いもある
TLS1.3(こちらもまだ標準化未完了)の導入が必須となるため、そちら側の理解も 必要になる TLS 1.3については、2017年にBluecoatのプロキシとちょっとした事件があったため、 抵抗を感じる人が多いかもしれない 透過性の問題などはまだまだGoogleでも議論が続いていた(という記憶) TLS1.3においても、従来の暗号化通信で問題になっていたRTTなどの遅延問題が 改善される見込み で、今はどうなってんの? 今のところ、コア仕様を固めて2018年11までに提出するのが目標 いまいますぐにどうかなるというわけではない
どうすりゃいいの? QUICだけじゃなく、TLS1.3の動向にも気を使う必要がある GoogleのサービスをChromeで利用すると、QUICが有効になっている 可能性が高いので、”場合によっては”管理部のインフラ屋さんとかは L7FWを使ってQUICを明示的に無効にする必要があるかもしれない 新しい技術をものすごく嫌がる人がいるが(気持ちもわかる)、 悪ではなく、ただの新しい技術なので、温かい目で見守ってほしい
アプリ屋さんともちゃんと相談して、ミドルウェアの 選定・対応を検討していきたい
まとめ HTTPみたいな身近かつ十分成熟したプロトコルも、 実は日々進化するためにいろいろ動きがある 身近な技術の動向をキャッチアップすることも、 インフラエンジニアとしては大事なスキル(を僕は思っている) QUIC流行れ
僕より詳しい人、続きをどうかお願いします https://speakerdeck.com/shigeki/yun-yong-falseguan-dian- karajian-tatlspurotokorufalsedong-ki 大津さんの資料がすごくよくまとまっていてわかりやすい flano_yukiさんのブログも良いです!!!
ご静聴ありがとうございました!