フューチャー技術ブログ

Real World HTTP 第2版はなぜ1.5倍になったのか

Real World HTTP 第2版が2020/04/20出版されました。第2版が出版されるというのは、初版をみなさまが買ってくださったおかげです。どうもありがとうございます。紙媒体は先行入荷する書店さんではすでに入っているようです。オライリーのウェブサイトから電子版を購入することもできます。

Real World HTTPの初版の執筆時にも、ネットで見かけるHTTP絡みのネタとかをGitLabのissueにガンガン突っ込みつつ執筆も行っていました。しかしそのissueが発散するばかりで収束しないので、「もうここで手を打ちましょう」とスナップショットを取ったのが初版でした。その後もウェブのネタ(issue)はどんどん増えていきます。それを昨年のミニ版で一部反映したものの、消化しきれなかったものや、その後追加されたものを入れて出来上がったのが第2版になります。ページ数は1.5倍になったのにお値段は5%しか上がっていないというお買い得本になっています。

2017年から変わったこと

QUIC周りがHTTP/3として再構成された、というのが一番派手な変化でありましたが、それ以外にも細々とあります。TLS 1.3とか、もはや当たり前になりすぎてしまったものもあります。逆にsdchのようなChromeが導入したけど、削除された圧縮フォーマットとかもあります。OAuth 2.1周りとかも規格の進化が行われつつあります。あと地味どころだと、動画ストリーミングのApple発のHLSが正式にRFCが発行されたり、robots.txtもRFC化のための動きが再開されたり、というのもあります。

MDNに対してChromeなど他のブラウザベンダーもコミットしますよ、とか、HTML周りの仕様策定がWHATWGに正式に移管されるなど一次情報源の変化もありました。

EdgeがChromiumベースになってしまったのは少しショックでしたが、Windows 7などにもEdgeが配信されることで、標準がIEしかない、という状況は改善されました。本書でもセキュリティ以外のIEのみの話はかなり削りました。Let’s Encryptの大流行でAlways TLSが大幅に進行したのも初版と大きく世界が変わったところですね。

とはいえ、個人目線では追いきれないほどの変化が日々発生しています。SxSとかWebTransportなどは今回触れていません。基本的に https://caniuse.com を見てChrome一党のみが対応しているものは除外しています。RFCもQUICみたいな確度の高いものを除いては、提案段階ではなく策定が完了し、現実世界で広く使われているものを中心に絞っています。中にはクッキーのSameSiteみたいに、RFCがないんだけど全ブラウザが何故か実装しているやつもありますが、これも取り上げています。

ただ、これらの状況の変化による追記よりは、それまでもあった内容の追加の方が多数に及びます。

初版より前からあったけど追加したこと

例えば、リスト型攻撃がよく話題になります。その踏み台としてよく取り沙汰される平文パスワード。それを防ぐためのbcrypt等のパスワード保持のためのハッシュ関数の紹介をしたり(このWikipediaの翻訳も執筆のついでにやりました)、TOTPをはじめとする多要素認証の仕組み、あとはリスト型攻撃を受けてしまったあとに、それをユーザーに通知することで被害拡大を防ぐためのログイン通知あたりですね。初版のころにすでにどれもあったものですが、ニュースになることが多かったので追加しました。

あとは、厳密にはHTTPではないですが、UnifiedであるはずのURLやそれ以外の情報をまとめて伝搬する、もっとUnifiedな伝送手段であるところのQRコードとかも、ウェブと地続きに感じたので取り上げています。小ネタとしては、XMLHTTPRequestはなぜ「XML」が頭に付いているのか、みたいなのも入れています。

追加もそこそこ多く、章ごとの文章バランスが悪くなってしまったのでJavaScriptのみの章を切り出しました。WebSocketとかServer Sent EventsみたいなAPIの紹介から、JavaScriptだけを使ってグローバルナビゲーションを伴うGET/POST、伴わないGET/POST、ファイルのダウンロード、動的にコンテンツを作成しつつダウンロードみたいな、考えられうる通信パターンを網羅してみたり、そのついでにデータURIスキームの説明も追加しました。

ミニ版で追加したウェブアプリケーションの章も入れると同時に、クラウドサービスの章を追加しました。DNSとかCDNは初版のときから、取り上げたいなぁと思っていましたが、前者はそれだけで価値を感じてもらうのは難しそうなのでクラウドの応用例のロードバランスとか、各地域のエッジに分散させるお話につながるようにしています。CDNとかクラウドは、各ベンダーが競っていろんな新規サービスをどんどん出している状態なので最大公約数的になってしまっていますが「クラウドを使ったインフラ仕事をするにあたって基礎知識として知っておくとAWSやGCPのドキュメントを読むのが捗る」知識に絞って紹介しています。

ぜひReal World HTTPを(部分的に)打ち倒す本が出てほしい

この本は、自分が読みたかった本がなかったので書き始めたというのが出発点です。今回の改訂で追加した内容も、仕事や趣味でコードを書くにあたって調べた内容とかをissueに記録しといて、それを元ネタにしたものが多数です。そのおかげか編集の瀧澤さんとは「またReal World HTTPに書いたネタが役立ってしまった」みたいなことをよく会話しておりました。その会話は今回、素敵な帯の文言にしていただきました。

クラウドも、前職DeNAも今は大々的に使っているようですが、僕の在籍中はオンプレでデータセンターを安定に運用しきっていて(これはこれですごいノウハウ)、僕はAWSやらGCPに触れる機会はありませんでした。フューチャーに転職してきて、数カ月ごと(毎月?)に新規案件が立ち上がるという環境の中、クラウド環境構築がかなり身近になったので追加する気持ちになったというのもあります。

そのようなアプリケーションを作る開発者としての目線で見えている世界というのはやはり偏りはあると思っています。

頭の中にウェブの世界で出てくる技術を一通り網羅して地図を作るというコンセプトなので、ひたすら広く触れていくという本書の基本スタンスは今後も変わらないものの、狭く深い領域もいくつも出てきています。この特定技術を深めまくってページ数を増やすのは読む側も辛かろう、と思います。書くのも辛いです。

HTTP/2のフレームは後藤ゆきさん著の細かく紹介している本がすでに出ています。QUICのフレームは、本書の原稿が固まる直前に出版されたn月刊ラムダノート(僕も寄稿している)に西田佳史さんによる紹介記事があり、本書でもそちらにdelegateしています。QUICは今後いろいろな通信の土台になっていくもので、それ単独で書籍になりうるものだと思います。それ以外にもWebRTCとかも。ぜひそっちにフルコミットされているエンジニアの方々に書いてほしいです。僕も読みたいです。

さきほど書いたChromeのみでガンガン作られている、エッジなものだけを抜粋した本とかきっと面白いと思います。まあ変化が激しすぎて、Chromeのカンファレンスが一次情報、みたいな感じになってしまうんでしょけども。

校了後も追加したい内容は増えていっている

書籍の特性上、完成することはなく、古くなる部分が出てきてしまうのは仕方がない面があります。

ここ数ヶ月のプライバシーの扱い、例えばファーストパーティークッキーやローカルストレージなども7日で消える話とかは原稿が固まったあとのお話ですので、本文に入れることはできていません。これ自体はブラウザ本体にパスワード管理が内蔵され、ブラウザにユーザー情報を持ち、プロファイルが同期されるという世界にあっては、あんまり問題にならないのかな、というのが個人的見解です。切れたとしても、ユーザーIDとパスワードがすでに埋め込まれたログインフォームが出てきて、OKボタンを押すだけであれば、守られるプライバシーと天秤にかければ十分リーズナブルだと思いますし。そうなると、ブラウザのプロファイルの同期とかパスワード管理も説明しなきゃな、と思ったりもするわけですが。

それ以外にも、X-Forwerded-Forの説明はしたけど、ユーザーのIPの取得は紹介してなかったなぁ、とか世の中の話題を見て追加したいネタもまた育っていたりしますし、会社のチャットで、CORSのプリフライトリクエスト(OPTIONメソッド)は認証なしでOKにしておかないとCORSのやりとりが失敗するというのを見て、なるほどぉ、と思ったりもあります。

このように本屋に並ぶ時点でも、新しい情報は続々と出ているわけですし、世の中でプログラミングしていて「これはすごい」という落とし穴に落ちる人も続々登場しているわけですが、本書が初版のときから目指していた「今後新しい知識が出てきた場合も、この本を読めばキャッチアップが素早くできる」という価値は変わらないと思います。

今後のReal World HTTP

追加した内容のところにも書いたのですが、キラキラした新しい仕様ばかりを取り上げるつもりは今までもなく、今後もReal Worldの名の通り、もっと泥臭い、みなさんがこれから落ちる予定の落とし穴を先に埋めていくような本を目指してさらに拡充して、「読んでてよかった!」を増やしていきたいと思います。HTTP/2の策定前にはQUICはすでに実践投入されていたわけですが、現在そのポジションにあたるものはないので、HTTP/4がすぐに来ることはないかなと思いますが、出なかったとしても(売れている限りは)改訂が止まることはないかと思います。

もちろん、増やすだけではなく、TRACEメソッドのように、ブラウザ側で対策されて、覚えておいても一円の利益にもならないようになったものは詳細情報はどんどん削っていく予定です。近年では、HTTPに限らず、何か情報を得ようとすると新旧入り混じった情報が大量に出てきます。現在でも考慮すべきなのかそうじゃないのか、そのフィルタリングのために知識が必要という状態です。情報の提供よりも、本当に必要なものだけに情報を絞るというのが専門家の価値かなと思います。ページ数を1.5倍にしといてなんですが、今後も削れるところは削って行こうと思います。

ついでに、ミニ版も、年内には更新したいなと思っています。

関連ページ


関連ページ: