📜

Real World HTTP 第3版を読んでみた

2024/06/26に公開

はじめに

WebやHTTPのことは何となくわかっているけれど、誰かに説明できるまで深く理解できてないと感じたので、しっかりと理解しておきたいと思って手に取りました。
本書の特徴は

  • HTTPの歴史書のような特色があり、HTTP/1.0、1.1、2、3とどのように遷移してきたのかを知れる
  • curlコマンドやGoを使って実際の動きを知れるので、コードベースで仕組みを理解できる

となっています。

https://www.oreilly.co.jp/books/9784814400669/

各章の簡単な感想

1章 ブラウザは何をしているのか?

Webページが表示されるまでのブラウザの動きがわかりやすく書かれています。
アドレスバーにURLを入力したら、ブラウザは

  • URLのホストを元に、ドメインをDNSサーバーに問い合わせてIPアドレスを取得する
  • IPアドレスのサーバーに向けてHTTPリクエストを送信してページファイルを取得する
  • 取得したファイルの情報をレンダリングエンジンに渡す
  • レンダリングエンジンが描画して画面に表示する

という働きをします。
このあたりはさらっと説明できるようにしておきたいと思いました。

他にもリンクをクリックした時の挙動や検索、ログイン処理の流れもわかりやすく説明されていました。

2章 HTTP/1.0の世界:基本となる4つの要素

HTTPの歴史の始まりがわかりやすく書かれています。
この章ではHTTPの基本となる4つの要素

  • メソッドとパス
  • フィールド
  • コンテンツ
  • ステータス

について、それぞれどんな役割があるのかをわかりやすく説明されていました。
HTTPの歴史の中で消えていったメソッドがあるということが個人的には一番興味深かったです。

3章 HTTP/1.0のセマンティクス:ブラウザの基本機能の裏側

この章ではHTTPの4つの要素を使って、フォームの送信やクッキー、キャッシュといったブラウザの基本機能を実現しているかが書かれています。

キャッシュがどういうものかは知っていても具体的にブラウザでどのようにデータを保持してどのように更新するのか、あるいはしないのかということをよく知らなかったので、この章できちんと知ることができました。またフロー図も載っているので、視覚的に理解することができました。

4章 GoによるHTTP/1.0クライアントの実装

この章では、net/http パッケージを使ってのHTTP/1.0クライアントの実装、各メソッドやフィールドを試す方法が書かれています。
コードを書いて実際の動きを追ってみることで、クライアントが何をしているのかをよく理解することができました。

5章 HTTP/1.1のシンタックス:高速化と安全性を求めた拡張

この章では、Keep-AliveやTLS、PUTやDELETEメソッドなど、HTTP/1.1で新たに増えた要素や標準化された要素について書かれています。
技術的な難易度と重要度の高さから、特にTLSの説明に多くページが割かれていました。

6章 HTTP/1.1時代のセマンティクス:広がるHTTPの用途

この章では、HTTP/1.1以降に追加されたHTTPのセマンティクスについて書かれています。
ファイルのダウンロードやXMLHttpRequest、ウェブサイト間での共通の認証・認可プラットフォームなど、今では当たり前のように使われている機能についてわかりやすく説明されていました。

7章 GoによるHTTP/1.1クライアントの実装

この章では、HTTP/1.1からできるようになった、プロトコルのアップグレードやチャンク、RPCをGoを使って実装する方法が紹介されていました。
プロトコルのアップグレードはあまり馴染みがなかったので、実装して実際の動作を確認することで理解が深まりました。

8章 HTTP/2、HTTP/3のシンタックス:プロトコルの再定義

この章ではHTTP/2、HTTP/3 の生まれた背景、なにを目的とされているかが書かれています。
HTTP/2もHTTP/3もHTTP/1.1と比べて通信の高速化のための工夫がなされています。
HTTP/2ではテキストベースのプロトコルからバイナリベースのプロトコルに変化したことと、フィールドの圧縮により高速化を実現しています。
HTTP/3ではUDPによる通信により高速化を実現しています。

HTTPの各バージョンとの違いと見比べながら何が新しく実装されたのか、何を目指しているのかを知ることができて非常に勉強になりました。

9章 HTTP/2時代の新しいユースケース

この章ではHTML5とHTTP/2時代に作られたり、実用化されたさまざまな技術要素が紹介されています。
レスポンシブデザインやオープングラフプロトコルなど、今では当たり前のように使われている技術がどのように実現されているのかが説明されていて、勉強になりました。

10章 GoによるHTTP/2、HTTP/3、HTML 5のプロトコルの実装

この章では、HTTP/2、HTTP/3、103 Early Hints、Server-Sent Events、WebSocketをGoで実装する方法が紹介されています。
特にServer-Sent EventsやWebSocketの実装は普段あまりする機会がないので面白かったです。

11章 クライアント視点で見るRESTful API

この章では、RESTful APIを利用する方法が紹介されています。RESTの基本的な考え方、RPCとの違い、HATEOAS についても書かれています。
Githubで公開さているAPIを利用するコードを実装する方法も書かれており、勉強になりました。

12章 JavaScriptによるブラウザからの動的なHTTPリクエスト

この章では、Javascriptによる通信の具体的な方法が書かれています。
6章で紹介されていたXMLHttpRequestや、Server-Sent Events、WebSocket、Fetch APIの使い方が紹介されていました。
特にFetch APIの使い方が詳しく書かれていて、改めてFetch APIへの理解を深めることができました。

13章 ウェブアプリケーションの基礎

この章では、ウェブアプリケーションサーバーの開発にあたって必要となる基礎的な知識について書かれています。
ウェブアプリケーションの動作のパターンの項目では、サーバーサイドレンダリング、Ajax、シングルページアプリケーションのそれぞれのサーバーの動きとブラウザに画面が表示される仕組みの違いがわかりやすく説明されていました。

14章 クラウド時代のHTTP:ウェブを強くするさまざまな技術

この章では、大規模サービスを支えるHTTP関連の技術について書かれています。
大規模なサービスになるほど必要になる負荷分散の仕組みとして、ロードバランサーやCDNの説明があり、特にCDNの仕組みが丁寧に説明されていたので理解しやすかったです。
またマクロサービスにおける認証や分散トレーシングまわりの技術も紹介されていて非常に勉強になりました。

15章 ウェブのプラットフォーム化

この章では、プラットフォーム技術について書かれています。第3版で新しく追加された章です。
OpenSocialやウェブフック方式の紹介やスーパーアプリと呼ばれるようなサービスのアーキテクチャが紹介されていました。

16章 セキュリティ:ブラウザを守るHTTPの機能

この章では、クロスサイトスクリプティングやセッションハイジャッキング、クロスサイトリクエストフォージェリなど、よくある攻撃と対策方法について書かれています。
ちょうど業務でセキュリティまわりのことをしていたこともあり、改めて勉強になりました。
セキュリティの問題は個人的にもさらに深堀りしていきたいなと思いました。

まとめ

HTTPの歴史をたどりながら、何を目的にどのような機能が追加されたのかを具体的に分かりやすく書かれていて、大変勉強になりました。個人的には8章と13章を読んで、漠然としていた知識を腹落ちさせることができたかなと感じています。
HTTPのことについて、網羅的に知りたい人に強くお勧めできる本です。

レスキューナウテックブログ

Discussion