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.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
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
160
Terraformモジュールは、なぜ「魔境」化するのか
hayama17
2
220
やさしいA2A入門
minorun365
PRO
7
900
AI Testing Talks: Challenges of Applying AI in Software Testing: From Hype to Practical Use
exactpro
PRO
1
140
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
310
非定型業務をAI slackbotで自動化する ~ 社内要望を自動壁打ちするbotを作った ~/automating-ad-hoc-work-with-ai-slackbot
shibayu36
0
530
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
4
1.2k
OCI Oracle AI Database Services新機能アップデート(2026/03-2026/05)
oracle4engineer
PRO
0
310
ChatworkとBPaaS 異なる特性で学んだAI機能開発の ベストプラクティス
kubell_hr
2
3.3k
Chart.js が簡単に使えるようになっていたので OGP 画像生成に使った話
kamekyame
0
170
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
2k
ブロックチェーン / Blockchain
ks91
PRO
0
110
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
3.6M
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
200
Being A Developer After 40
akosma
91
590k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
160
Believing is Seeing
oripsolob
1
140
Mind Mapping
helmedeiros
PRO
1
240
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
220
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Abbi's Birthday
coloredviolet
2
8k
Ruling the World: When Life Gets Gamed
codingconduct
0
250
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版の執筆はしていません。みなさんの応援があればそのうち出版されるかも? ぜひ、新入社員研修とかで御社とか弊社の新入社員の人数分、大量発注してくださ い!企画がすすむと思います!