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
妄想Real World HTTP第二版
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yoshiki Shibukawa
October 12, 2018
Technology
4.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
妄想Real World HTTP第二版
Yoshiki Shibukawa
October 12, 2018
More Decks by Yoshiki Shibukawa
See All by Yoshiki Shibukawa
Godot Game EngineでGUI作成
shibukawa
1
5.1k
あなたはContextの挙動を説明できますか?
shibukawa
0
1.9k
Other Decks in Technology
See All in Technology
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
630
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
370
TypeScript入門 2026
recruitengineers
PRO
3
660
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
310
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
FDEの心得
noriakioji
5
6.2k
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
システム思考で問題に対処する
yussak
0
320
老害フォレンジッカーはAI羊の夢を見るか?
tadmaddad
0
340
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
2
430
事業価値と Engineering 2026年度版
recruitengineers
PRO
50
24k
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
3
940
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Designing Powerful Visuals for Engaging Learning
tmiket
1
490
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
620
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
470
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
470
Embracing the Ebb and Flow
colly
88
5.1k
Exploring anti-patterns in Rails
aemeredith
3
460
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
420
The untapped power of vector embeddings
frankvandijk
2
1.8k
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版の執筆はしていません。みなさんの応援があればそのうち出版されるかも? ぜひ、新入社員研修とかで御社とか弊社の新入社員の人数分、大量発注してくださ い!企画がすすむと思います!