Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
妄想Real World HTTP第二版
Yoshiki Shibukawa
October 12, 2018
Technology
0
2.5k
妄想Real World HTTP第二版
Yoshiki Shibukawa
October 12, 2018
Tweet
Share
More Decks by Yoshiki Shibukawa
See All by Yoshiki Shibukawa
shibukawa
0
710
shibukawa
0
930
Other Decks in Technology
See All in Technology
satoryu
0
2.2k
ymas0315
0
160
cygames
1
360
torisoup
0
290
ocise
1
940
sakon310
4
4.2k
kyonmm
1
2.1k
viva_tweet_x
5
2.6k
suzukiry
0
210
tzkoba
0
390
vkbaba
0
130
clustervr
0
160
Featured
See All Featured
garrettdimon
287
110k
chrislema
173
14k
jlugia
216
16k
lauravandoore
11
1.2k
paulrobertlloyd
71
3.6k
swwweet
206
6.8k
sachag
267
17k
bkeepers
52
4.1k
jonyablonski
14
1.1k
keavy
106
14k
geeforr
332
29k
ufuk
56
5.4k
Transcript
妄想Real World HTTP第2版 フューチャー(株)渋川よしき
2 お前誰よ 渋川よしき 本田技術研究所:〜 2010年12月 DeNA:〜2017年8月 →古川さんと知り合う フューチャー(株):2017年9月〜 三女の父 著書
つまみぐい勉強法(共著)、 Real World HTTP、Mithril、 Goならわかるシステムプログラミング 翻訳 エキスパートPythonプログラミング、 ソフトウェア開発スクラム、 ポモドーロテクニック入門、 アート・オブ・コミュニティ etc 好きな言語 JavaScript® / Go / Python プログラミング以外 インラインスケート@光が丘公園 最近、ポケモンGoでレベル30になりました アカウント github.com/shibukawa twitter.com/shibu_jp
業務連絡:Node.jsユーザー会の古川さんへ Node学園祭のスポンサーフィーの見積書をもらった ら、会社の経理に投げますので、早めにお願いしま す。 完了しています
はじめに みなさん、当然、Real World HTTPはご購入くださいましたよね? みなさんはすでに新しい第2版のReal World HTTP(まだ出てない)をすでに一通り読ん で、その差分の振り返りをしている、という想定でプレゼンします。 アニメとかで、振り返り回が唐突に入ったりしますよね?あれの妄想書籍版だと思ってく ださい。
執筆後から書きためていた、追加したい項目リストのダイジェストです
None
1章: HTTP/1.0シンタックス • MIMEタイプ ◦ デフォルトというか型なし (void*とか[]byteみたいな)のはapplication/octet-streamですよ • Python 3はまだHTTP/0.9が使える
• クエリパラメータで配列や階層を表現する手法。 ◦ 昔は?param[0]=1¶m[1]=2 みたいなのもあった。 PHP文化? • HTTPのステータスコードは3桁の数字で意味が決まっているが、status phraseの 文字列は自由に書き換えられる • GET ◦ 大事な処理をやっちゃだめだよ。べき等だよ ◦ ガレージドアを操作する APIをGETにしてしまって、Safariがおすすめページに出してくるたびにドア が開いて死んだ話。
• GETのサイズ制限が厳しい ◦ POSTに逃げる? ◦ POSTでトークンを作成して、そのトークン利用の GETにする? ◦ Elasticsearchは、あえて規約違反の GETのBodyを利用
2章: HTTP/1.0セマンティクス • URLエンコーディングと雑に書いているけど正確にはRFC3986の Percent-Encoding • URL ◦ オリジンとは何か。ドメイン、プロトコル、ポート。どれか違えば別オリジン。 ◦
URLのフラグメント部はサーバーに送信されない ◦ canonical URLという概念。canonical URLには絶対パスを書きましょう ◦ //example.com/style.cssみたいなrelative URL ◦ RFC8089のファイルスキームで、絶対パスじゃないとダメになった • キャッシュ ◦ Varyヘッダーを使いましょう ◦ HTML5ではメタタグを使ってキャッシュ制御を変更できなくなった ◦ noindexとrobots.txtを同時に設定して効果がなかった事案
• HTMLのエンコーディングはUTF-8のみになった ◦ UTF-8、昔は6バイトまで許容する規格だったけど、今は違うよ。 • プロキシで消費すべきヘッダーは、Connectionヘッダーにカンマ区切りで列挙する • sdchの圧縮フォーマット ◦ Chromeでサポートされなくなっていたので非推奨
◦ もともとChromeでしかサポートしていなかった • クッキー ◦ ブラウザのデータをユーザーのデバイス間で共有するサービス( iCloudとかChromeとか)のおかげ で、ユーザー情報保存一般に使いやすくなっているよ
3章: Goによる実装 • Goのmultipart、1.9からサイズ指定できるようになったよ • リバースプロキシーもGoで簡単に書けるよ ◦ https://qiita.com/shibukawa/items/55f64d81ea6ac802dd15 ◦ MITMなプロキシの実装
• contextパッケージの紹介
4章: HTTP/1.1のシンタックス • ドメインシャーディング ◦ 並列ダウンロード • deferとかasyncとか
5章: HTTP/1.1のセマンティクス • 認証情報の説明を強化 ◦ 2FAの6桁の数値を入れるやつ →RFCになっているよ ◦ JWTトークン ◦
Mobageのかんたん会員 ◦ FIDO U2F ◦ Web Authn • Geo Location ◦ GeoJSONってのがあるよ ◦ Googleも位置情報を元に検索結果を変えるようになった ◦ GTFS・乗り換えなどの公共交通データ交換用フォーマット ◦ AmazonだけじゃなくてXVideosも位置情報見て推薦出してくるよ(読者のタレコミ) ◦ 特許だった
• RPC ◦ gRPC • ファイルのダウンロード ◦ 最近のaタグにはdownload属性があるよ。 ◦ content-dispositionにfilenameつけないとファイル名入力のダイアログが出る?要実験。
◦ X-Download-Options: noopenヘッダーをつけると必ずダウンロード。
6章: Goの実装 • 変更ありません
7章: HTTP/2時代のシンタックス • WebSocket ◦ 緊急地震速報APIはWebSocket ◦ WebSocket over HTTP/2
• HTTP/2 ◦ Web PUSH無くそうか?という話が出ていると聞いたけど本当? • QUIC ◦ QUICのヘッダ圧縮のQPACKとか
8章: HTTP/2時代のセマンティクス • レスポンシブデザイン ◦ CSS Round Displayという規格 ◦ rendertronとかサーバーサイドレンダリングとか
BFFとか • Service WorkerでPWA ◦ 通信のフック、キャッシュ、オフラインアプリケーション ◦ Google Gearsとかあったよね。 • 動画ストリーミング ◦ HLS (HTTP Live Streaming)がRFCになったよね ◦ CMAF(Common Media Application Format)というもっと遅延が短い方式も策定 ◦ SVCとかのマルチビットレートの話 ◦ Slackが、セキュリティを緩めた速度特化のWebRTCを独自実装した話 • セマンティックウェブ ◦ 組織外の人に会議通知を送れるって知ってました? ◦ OGPは後から変えても変わらないことがある
• Beacon API • エラー報告 ◦ JSONフォーマットがRFCに ◦ Network Error
Loggingというネットワークエラー報告の APIとかも
9章: Go実装 • HTTP/2のフレームを直接パースとかやってみる?
10章: セキュリティ • セキュリティチェックリスト系を紹介する • HTTPSサイトでもHSTS大事。MITMとかでダウングレードされちゃう危険 • iframe警告出るようになったよね • 2要素認証の6桁の数値を入れるやつ。あれ、最初のQRコードをスクショ取られる
と全然だめだよ • reCAPCHAとかCAPCHAとか私はロボットではありませんとか。 • XSSの統計とか出てる(snykのブログ) • パッケージのスキャナ(Vulsとかnpm.jsのaudit、snyk、コンテナなど) ◦ パッケージ乗っ取りとかいろいろ起きました
• 10GBに膨らむGZIPファイルを送りつけてDDoSを撃退した話とか • CDN、WAF。防弾ホスティングサービスというものがある • PKCE • ChromeがHPKP廃止。Expect-CT • 一度繋いだWifiに自動接続しちゃう
• 「高速は我々には遅すぎる」「天文学的数字はセキュリティの前では雑魚」 • パスワード保存はBCrypt • 暗号的乱数取得はJavaScriptでもできる • SafariがUAを一度固定してから、再度固定を解除した • CORB (Cross Origin Read Blocking)
11章: RESTful API • RESTful APIのバッチ実行をGoogle/MSがガイドラインに入れている ◦ RedisのMULTIや、JSON RPCの複数実行と同じで複数命令を一度に投げる •
ステータスコード ◦ Nginxには非標準のステータスコード 444というのがある。レスポンスヘッダーを送らずにコネクショ ンを閉じる ◦ 昔、800が正常、みたいなステータスコードを実装した SIerがいたらしい(うちじゃないよ) ◦ 情報が存在しない場合に、存在があることすら隠す場合は 404が良い。権限がない 403でも良い。
新章:DNSとか、CDNとか、HTTPより下 • メルカリのセキュリティの問題でCDNに注目が集まりました。 ◦ エッジサイドインクルード、エッジサイドコンピューティング ◦ トランジットとピアリング ◦ 動画ストリーミング、 TLS
◦ Google起因の回線障害とかもありましたよね • ソシャゲのリセマラとCDN ◦ リセマラのCDN破産という言葉が(ソシャゲ運用者に)昔あった。 CDNコストも高かった。 • ブロッキングの話題でも注目されています。 • 実際に、どういうブロッキング手法があるのか?回避策は? ◦ 韓国から、DMM.co.jpのエロサイトは繋がらないらしい。 ◦ Googleが最近出してきたDNSアクセスの暗号化手法 • プライベートアドレスとは
おまけ • IETFとか、Internet Society、RFCとは、決まるためのプロセスみたいな説明
まとめ いつか第2版に載せたいな、というメモ(160件)のダイジェストでした。 項目だけでも、すでに読み終わったような満足げな気持ちになってきますよね? 第2版の執筆はしていません。みなさんの応援があればそのうち出版されるかも? ぜひ、新入社員研修とかで御社とか弊社の新入社員の人数分、大量発注してくださ い!企画がすすむと思います!