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
Yoshiki Shibukawa
October 12, 2018
Technology
4.5k
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.8k
Other Decks in Technology
See All in Technology
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
630
#エンジニアBooks 30分でわかる 「技術記事を書く技術」 / engineer-books 2026-06-30
jnchito
1
150
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
20
8.2k
Hatena Engineer Seminar 37 jj1uzh
jj1uzh
0
380
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
10
1.7k
グローバルチームと挑むプロダクト開発
sansantech
PRO
1
110
AIで政治は変わるのか? — 中高生と考えたAI時代の民主主義(東海高校サタデープログラム)
eitarosuda
0
310
5分でわかるDuckDB Quack
chanyou0311
4
290
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
0
160
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
310
Why is RC4 still being used?
tamaiyutaro
0
260
AIエージェントとPhysical AIが拓く製造業の変革(ハノーバーメッセリキャップ)
iotcomjpadmin
0
190
Featured
See All Featured
Practical Orchestrator
shlominoach
191
11k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
990
Agile that works and the tools we love
rasmusluckow
331
22k
Become a Pro
speakerdeck
PRO
31
6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
380
Writing Fast Ruby
sferik
630
63k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Chasing Engaging Ingredients in Design
codingconduct
0
230
Exploring anti-patterns in Rails
aemeredith
3
430
Bash Introduction
62gerente
615
220k
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版の執筆はしていません。みなさんの応援があればそのうち出版されるかも? ぜひ、新入社員研修とかで御社とか弊社の新入社員の人数分、大量発注してくださ い!企画がすすむと思います!