Real World HTTP 第3版 ミニ版

―歴史とコードに学ぶインターネットとウェブ技術

[cover photo]
TOPICS
発行年月日
PRINT LENGTH
207
ISBN
978-4-8144-0083-6
FORMAT
PDF EPUB

本書は、2017年に発行し、2024年に第3版を発行した『Real World HTTP 第3版』のエッセンスを凝縮した、無料の電子書籍です。
HTTP/1.0、HTTP/1.1、HTTP/2と、HTTPが進化する道筋をたどりながら、ブラウザが内部で行っていること、サーバーとのやりとりの内容などについて、プロトコルの実例や実際の使用例などを交えながら紹介しています。
ミニ版のため、一部の内容を割愛しています。詳しくは本書の「まえがき」をご覧ください。

ミニ版の使用について

ミニ版の図版やテキストは、著作権法で認められている引用の範囲に加えて、有志での勉強会、自社の社員向けの研修に用いるプレゼンテーション資料のために、全体の10~20%程度のテキストと図版や表を利用することができます。
具体的には引用部分の明記を求める条件、引用だけを用いた資料作成、引用とそれ以外の主従関係(分量)の制限を外れた利用を許可します。ただし、かならず引用元を明記していただくようお願いいたします。
テキストの大部分を研修資料などの目的で、ガイドラインとなる分量を大幅に超えて引用する場合に、本書を丸ごとコピーしたり、再配布することはおやめください。そのような場合は、利用者ご本人の手で個別にミニ版をダウンロードしてください。
また、ミニ版を元にして作成されたプレゼンテーション資料については、可能であれば本書と同様に公開していただけたら嬉しいです。

なお本書はEbook版のみとなりますので印刷物については、オリジナル版である『Real World HTTP 第3版』をご参照ください。

目次

まえがき

1章 ブラウザは何をしているのか?
    1.1 HTTPクライアント
    1.2 ウェブページが表示されるまで
        1.2.1 最初のページの表示
        1.2.2 リンクをクリック
        1.2.3 検索
        1.2.4 ログイン
        1.2.5 本章のまとめ

2章 HTTP/1.0の世界:基本となる4つの要素
    2.1 HTTPの歴史
        2.1.1 テストエコーサーバーの実行
    2.2 HTTP/0.9でできることを試す
    2.3 HTTP/0.9から1.0への道のり
    2.4 HTTPの先祖(1) 電子メール
        2.4.1 フィールドの送信
        2.4.2 フィールドの受信
        2.4.3 MIMEタイプ
        2.4.4 Content-Typeとセキュリティ
        2.4.5 電子メールとの違い
    2.5 HTTPの先祖(2) ニュースグループ
        2.5.1 メソッド
        2.5.2 ステータス
    2.6 リダイレクト
        2.6.1 POST送信したのに「GETメソッドは受けつけられない」エラー
    2.7 URL(Uniform Resource Locators)
        2.7.1 URLの構造
        2.7.2 URLと国際化
        2.7.3 正規URL
        2.7.4 Protocol-Relative URL
    2.8 コンテンツ(ボディ)
        2.8.1 GETリクエスト時のコンテンツ
    2.9 本章のまとめ

3章 HTTP/1.0のセマンティクス:ブラウザの基本機能の裏側
    3.1 シンプルなフォームの送信(x-www-form-urlencoded)
    3.2 フォームを使ったファイルの送信(multipart/form-data)
    3.3 キャッシュ
        3.3.1 更新日時によるキャッシュ
        3.3.2 Expiresヘッダーフィールド
        3.3.3 確実にキャッシュしない条件
        3.3.4 ETagヘッダーフィールド
        3.3.5 Cache-Controlヘッダーフィールド
        3.3.6 Varyヘッダーフィールド
    3.4 本章のまとめ

4章 HTTP/1.1のシンタックス:高速化と安全性を求めた拡張
    4.1 Keep-Aliveによる通信の高速化
    4.2 TLS(トランスポート・レイヤー・セキュリティ)
        4.2.1 ハッシュ関数
        4.2.2 共通鍵暗号と公開鍵暗号とデジタル署名
        4.2.3 鍵交換
        4.2.4 共通鍵方式と公開鍵方式を使い分ける理由
        4.2.5 TLSの通信手順
        4.2.6 暗号強度
        4.2.7 暗号スイート(Cipher Suite)
        4.2.8 TLSが守るもの
        4.2.9 常時TLS時代
    4.3 PUTメソッドとDELETEメソッドの標準化
    4.4 OPTIONS、TRACE、CONNECT、PATCHメソッドの追加
        4.4.1 OPTIONS
        4.4.2 TRACE(TRACK)
        4.4.3 CONNECT
        4.4.4 PATCH
    4.5 チャンク
        4.5.1 末尾へのフィールドの追加
    4.6 コンテンツ送信の確認
    4.7 データURIスキーム
    4.8 本章のまとめ

5章 HTTP/2、HTTP/3のシンタックス:プロトコルの再定義
    5.1 HTTP/2、HTTP/3で変わらないこと
    5.2 プロトコル選択の問題
        5.2.1 TLSのALPN
        5.2.2 HTTP Alternative Servicesによるアップグレード
        5.2.3 DNSのHTTPSレコード
        5.2.4 それぞれの方式のネゴシエーションタイミング
    5.3 HTTP/2
        5.3.1 SPDY
        5.3.2 HTTP/2の改善点
        5.3.3 ストリームによる通信の高速化
        5.3.4 HTTP/2のアプリケーション層
        5.3.5 フローコントロール
        5.3.6 HTTP/2とプリロードによるリソース取得の最適化
        5.3.7 HPACKによるフィールドの圧縮
    5.4 HTTP/3
        5.4.1 QUIC
        5.4.2 HTTP/3への道とレイヤー分割
        5.4.3 複雑すぎた機能の削除
    5.5 本章のまとめ

6章 ウェブアプリケーションの基礎
    6.1 用語の整理
    6.2 基本的なフロー
    6.3 ウェブアプリケーションのリクエストのライフサイクル
        6.3.1 HTTPリクエスト
        6.3.2 セッション
    6.4 ウェブアプリケーションの動作のパターン
        6.4.1 第1世代: サーバーサイドレンダリング
        6.4.2 第2世代: Ajax
        6.4.3 第3世代: シングルページアプリケーション
        6.4.4 第3.5世代: シングルページアプリケーション+サーバーサイドレンダリング
    6.5 インフラ構成
        6.5.1 ローカル開発環境
        6.5.2 本番環境の基本構成
        6.5.3 開発環境モードを一般公開してはいけない
    6.6 そのほかのインフラ形態
        6.6.1 PaaS(Platform as a Service)
        6.6.2 サーバーレス
        6.6.3 マイクロサービス
    6.7 ウェブアプリケーション内部の階層構造
    6.8 今後はあまり使われなくなる技術
        6.8.1 CGI
        6.8.2 リッチ・インターネット・アプリケーション
    6.9 API設計
        6.9.1 データを入れる箱の組み合わせ
        6.9.2 バリデーション
        6.9.3 ファイル送信
        6.9.4 ファイルダウンロード
    6.10 リダイレクトとリライト
    6.11 本章のまとめ

付録
    A.1 ステータスコード一覧
        A.1.1 100番台(情報)
        A.1.2 200番台(成功)
        A.1.3 300番台(リダイレクト)
        A.1.4 400番台(クライアントエラー)
        A.1.5 500番台(サーバーエラー)
    A.2 フィールド一覧
    A.3 Internet ExplorerとContent-Security-Policyフィールド
        A.3.1 X-Content-Security-Policyフィールド
        A.3.2 X-XSS-Protectionフィールド
        A.3.3 X-Frame-Optionsフィールド

あとがき