Real World HTTP 第3版 ―歴史とコードに学ぶインターネットとウェブ技術

Book description

本書はHTTPに関する技術的な内容を一冊にまとめることを目的とした書籍です。HTTPが進化する道筋をたどりながら、ブラウザが内部で行っていること、サーバーとのやりとりの内容などについて、プロトコルの実例や実際の使用例などを交えながら紹介しています。さまざまな仕様や実例、またGoやJavaScriptによるコード例を紹介しながら、シンプルなHTTPアクセスやフォームの送信、キャッシュやクッキーのコントロール、SSL/TLS、Server-Sent Eventsなどの動作、また認証やメタデータ、CDNやセキュリティといったウェブ技術に関連する話題を幅広く紹介し、いま使われているHTTPという技術のリアルな姿を学びます。 第3版では、より初学者を意識した導入や、スーパーアプリなどプラットフォーム化するウェブに関する新章を追加。幅広く複雑なHTTPとウェブ技術に関する知識を整理するのに役立ち、また、さまざまな新しい技術をキャッチアップする一助となるでしょう。

Table of contents

  1. 大扉
  2. 著作権表記
  3. まえがき
    1. 本書で学べること
    2. 本書では取り扱わないこと
    3. 歴史から学ぶ
    4. 本書の構成
    5. curl
    6. Go
    7. ハンズオンの準備
      1. Goのインストール
      2. Dockerのインストール
      3. ミニ版での改訂内容
      4. 第2版での改訂内容
      5. 第3版での改訂内容
    8. 表記上のルール
    9. サンプルコードの使用について
    10. オライリー学習プラットフォーム
    11. 意見と質問
  4. ブラウザは何をしているのか?
    1. HTTPクライアント
    2. ウェブページが表示されるまで
      1. 最初のページの表示
      2. リンクをクリック
      3. 検索
      4. ログイン
      5. 本章のまとめ
  5. HTTP/1.0の世界:基本となる4つの要素
    1. HTTPの歴史
      1. テストエコーサーバーの実行
    2. HTTP/0.9でできることを試す
    3. HTTP/0.9から1.0への道のり
    4. HTTPの先祖(1) 電子メール
      1. フィールドの送信
      2. フィールドの受信
      3. MIMEタイプ
      4. Content-Typeとセキュリティ
      5. 電子メールとの違い
    5. HTTPの先祖(2) ニュースグループ
      1. メソッド
      2. ステータス
    6. リダイレクト
      1. POST送信したのに「GETメソッドは受けつけられない」エラー
    7. URL(Uniform Resource Locators)
      1. URLの構造
      2. URLと国際化
      3. 正規URL
      4. Protocol-Relative URL
    8. コンテンツ(ボディ)
      1. GETリクエスト時のコンテンツ
    9. 本章のまとめ
  6. HTTP/1.0のセマンティクス:ブラウザの基本機能の裏側
    1. シンプルなフォームの送信(x-www-form-urlencoded)
    2. フォームを使ったファイルの送信(multipart/form-data)
    3. フォームを利用したリダイレクト
    4. コンテントネゴシエーション
      1. ファイルの種類の決定
      2. 表示言語の決定
      3. 圧縮による転送速度の向上
    5. クッキー
      1. クッキーの分類
      2. クッキーの間違った使い方
      3. クッキーに制約を与える
      4. オリジン
      5. ドメイン
      6. SameSite属性
    6. 認証とセッション
      1. Basic認証とDigest認証
      2. クッキーを使ったセッション管理
      3. 署名つきクッキーによるセッションデータの保存
    7. プロキシ
    8. キャッシュ
      1. 更新日時によるキャッシュ
      2. Expiresヘッダーフィールド
      3. 確実にキャッシュしない条件
      4. ETagヘッダーフィールド
      5. Cache-Controlヘッダーフィールド
      6. Varyヘッダーフィールド
    9. リファラー
    10. クローラー向けのコンテンツのアクセス制御
      1. robots.txt
      2. robots.txtと裁判の判例
      3. サイトマップ
      4. Fromヘッダーフィールド
    11. ユーザーエージェント
    12. 本章のまとめ
  7. GoによるHTTP/1.0クライアントの実装
    1. Goを使う理由
    2. GoのAPIの構成
    3. 本章で取り上げるレシピ
    4. GETメソッドの送信と、コンテンツ、ステータス、フィールドの受信
      1. io.Reader
    5. GETメソッド+クエリーの送信
    6. HEADメソッドでフィールドを取得
    7. x-www-form-urlencoded形式のPOSTメソッドの送信
    8. POSTメソッドで任意のコンテンツを送信
    9. multipart/form-data形式でファイルの送信
      1. 送信するファイルに任意のMIMEタイプを設定する
    10. クッキーの送受信
    11. プロキシの利用
    12. ファイルシステムへのアクセス
    13. 自由なメソッドの送信
    14. ヘッダーフィールドの送信
    15. 国際化ドメイン
    16. 本章のまとめ
  8. HTTP/1.1のシンタックス:高速化と安全性を求めた拡張
    1. Keep-Aliveによる通信の高速化
      1. パイプライニング
    2. TLS(トランスポート・レイヤー・セキュリティ)
      1. ハッシュ関数
      2. 共通鍵暗号と公開鍵暗号とデジタル署名
      3. 鍵交換
      4. 共通鍵方式と公開鍵方式を使い分ける理由
      5. TLSの通信手順
      6. 暗号強度
      7. 暗号スイート(Cipher Suite)
      8. TLSが守るもの
      9. 常時TLS時代
    3. PUTメソッドとDELETEメソッドの標準化
    4. OPTIONS、TRACE、CONNECT、PATCHメソッドの追加
      1. OPTIONS
      2. TRACE(TRACK)
      3. CONNECT
      4. PATCH
    5. プロトコルのアップグレード
      1. クライアント側からアップグレードを要請
      2. サーバー側からアップグレードを要請
      3. TLSへのアップグレードの問題点
    6. バーチャルホストのサポート
    7. チャンク
      1. 末尾へのフィールドの追加
    8. コンテンツ送信の確認
    9. データURIスキーム
    10. 本章のまとめ
  9. HTTP/1.1時代のセマンティクス:広がるHTTPの用途
    1. ファイルをダウンロードした後でローカルに保存
      1. ファイルを保存させるContent-Dispositionフィールド
      2. <a>タグのdownload属性
      3. JavaScriptを使ったダウンロード
      4. ブラウザ内で表示
    2. ダウンロードの中断、再開
      1. 複数範囲ダウンロード
      2. 並列ダウンロード
    3. XMLHttpRequest
      1. XMLHttpRequestの誕生
      2. XMLHttpRequestとブラウザのHTTPリクエストの違い
      3. Comet
      4. XMLHttpRequestのセキュリティ
    4. Geo-Location
      1. クライアント自身が場所を得る方法
      2. サーバーがクライアントの場所を推測する方法
    5. X-Powered-Byフィールド
    6. リモートプロシージャコール(RPC)
      1. XML-RPC
      2. SOAP
      3. JSON-RPC
    7. WebDAV
    8. ウェブサイト間で共通の認証・認可プラットフォーム
      1. シングルサインオン
      2. Kerberos認証
      3. SAML(Security Assertion Markup Language)
      4. OAuth
      5. OpenID Connect
      6. JWT(JSON Web Token)
      7. 実サービスにおける認証システム対応の落とし穴
    9. URL関連の技術
      1. 限定公開URL(Capabilities URLs)
      2. Well-Known URL
      3. 短縮URL
    10. 本章のまとめ
  10. GoによるHTTP/1.1クライアントの実装
    1. Keep-Alive
    2. TLS
      1. 証明書の作成
      2. HTTPSサーバーと証明書の登録
      3. Goによるクライアントの実装
      4. クライアント証明書
    3. プロトコルのアップグレード
      1. サーバー側のコード
      2. クライアント側のコード
    4. チャンク
      1. サーバーからの送信
      2. クライアントでの逐次受信(簡易版)
      3. クライアントでの逐次受信(完全版)
    5. リモートプロシージャコール(RPC)
    6. 本章のまとめ
  11. HTTP/2、HTTP/3のシンタックス:プロトコルの再定義
    1. HTTP/2、HTTP/3で変わらないこと
    2. プロトコル選択の問題
      1. TLSのALPN
      2. HTTP Alternative Servicesによるアップグレード
      3. DNSのHTTPSレコード
      4. それぞれの方式のネゴシエーションタイミング
    3. HTTP/2
      1. SPDY
      2. HTTP/2の改善点
      3. ストリームによる通信の高速化
      4. HTTP/2のアプリケーション層
      5. フローコントロール
      6. HTTP/2とプリロードによるリソース取得の最適化
      7. HPACKによるフィールドの圧縮
    4. HTTP/3
      1. QUIC
      2. HTTP/3への道とレイヤー分割
      3. 複雑すぎた機能の削除
    5. 新たなJavaScript用の通信API
      1. Fetch API
      2. Server-Sent Events
      3. WebSocket
      4. WebTransport
    6. WebRTC(Web Real-Time Communication)
      1. WebRTCのユースケース(1)
      2. WebRTCのユースケース(2)
      3. RFC以外のユースケース
      4. RTCPeerConnection
      5. メディアチャンネルとgetUserMedia
      6. RTCDataChannel
    7. HTTPウェブプッシュ
      1. ブラウザがプッシュサービスに購読を申し込む
      2. アプリケーションサーバーがプッシュサービスにメッセージを投稿
      3. ブラウザがプッシュメッセージを受信
      4. 緊急度の設定
    8. 本章のまとめ
  12. HTTP/2時代の新しいユースケース
    1. レスポンシブデザイン
      1. 対応する画像ファイルの増加
    2. セマンティックウェブ
      1. マイクロデータ
      2. JSON-LD
      3. RSS
      4. RDF系以外のデータ
    3. オープングラフプロトコル
    4. QRコード
      1. QRコードとスキーム
    5. モバイルアプリケーションにより多様化するブラウズ環境
      1. iOSのDeepLink
      2. AndroidのDeepLink
      3. DeepLinkの例:X(Twitter)のスマートフォンアプリを起動
    6. HTTPライブストリーミング(HLS)による動画のストリーミング再生
      1. HLSのビデオタグ
      2. マスターの.m3u8ファイル
      3. 字幕の.m3u8ファイル
      4. 動画ファイル
      5. HLSのメリットとデメリット
      6. HLS前後の歴史
    7. MPEG-DASHによる動画ストリーミング再生
      1. MPEG-DASHとHLSの再生方法の違い
      2. Media Presentation Description(MPD)ファイルの構造
    8. CMAF(Common Media Application Format)
    9. 特殊機能の有効化
    10. 本章のまとめ
  13. GoによるHTTP/2、HTTP/3、HTML 5のプロトコルの実装
    1. HTTP/2
      1. HTTP/2落穂拾い
    2. HTTP/3
    3. 103 Early Hints
    4. Server-Sent Events
      1. サーバーの実装
      2. クライアントの実装
    5. WebSocket
      1. サーバーの実装
      2. クライアントの実装
      3. ルームの実装
    6. 本章のまとめ
  14. クライアント視点で見るRESTful API
    1. RESTful API
      1. RESTful APIとRPCとの違い
      2. URL設計がRESTful APIの肝
      3. Web APIとトランザクション
      4. HATEOAS
      5. RESTfulとREST-ish
    2. メソッド
      1. べき等のGETをべき等ではない操作に使ってはいけない
    3. ステータス
    4. レスポンスコンテンツ
    5. 実際のRESTful APIを見てみる(PAY.JPの例)
    6. 実際のRESTful APIを見てみる(GitHubの例)
      1. GitHubの認可
      2. 情報取得のAPIアクセス
      3. 情報更新のAPIアクセス
    7. RESTful APIにアクセスする時の細かいトピック
      1. タイムアウト
      2. アクセス数制限
    8. 本章のまとめ
  15. JavaScriptによるブラウザからの動的なHTTPリクエスト
    1. ブラウザのHTTPとライフサイクル
    2. XMLHttpRequest
    3. Server-Sent Events
    4. WebSocket
    5. Fetch API
      1. Fetch APIの基本
      2. Fetchのオプション
      3. クエリーパラメーターの作成と解析
      4. コンテンツの送信
      5. Fetch APIにしかできないこと
      6. Fetch APIを使うときのよくある間違い
      7. ブラウザ以外のJavaScript環境からFetch
      8. 逐次送受信
    6. JavaScriptからブラウザのリロードをともなうHTTPアクセス
    7. ファイルのダウンロード
      1. 動的にコンテンツを作成してダウンロード
    8. 本章のまとめ
  16. ウェブアプリケーションの基礎
    1. 用語の整理
    2. 基本的なフロー
    3. ウェブアプリケーションのリクエストのライフサイクル
      1. HTTPリクエスト
      2. セッション
    4. ウェブアプリケーションの動作のパターン
      1. 第1世代: サーバーサイドレンダリング
      2. 第2世代: Ajax
      3. 第3世代: シングルページアプリケーション
      4. 第3.5世代: シングルページアプリケーション+サーバーサイドレンダリング
    5. インフラ構成
      1. ローカル開発環境
      2. 本番環境の基本構成
      3. 開発環境モードを一般公開してはいけない
    6. そのほかのインフラ形態
      1. PaaS(Platform as a Service)
      2. サーバーレス
      3. マイクロサービス
    7. ウェブアプリケーション内部の階層構造
    8. 今後はあまり使われなくなる技術
      1. CGI
      2. リッチ・インターネット・アプリケーション
    9. API設計
      1. データを入れる箱の組み合わせ
      2. バリデーション
      3. ファイル送信
      4. ファイルダウンロード
    10. リダイレクトとリライト
    11. 本章のまとめ
  17. クラウド時代のHTTP:ウェブを強くするさまざまな技術
    1. より大規模なウェブシステムの構成
    2. DNS(Domain Name Service)
      1. DNSの事前問い合わせ
      2. DNSサーバーのキャッシュ
      3. DNSクライアントのキャッシュ
      4. DNSを使ったロードバランス
      5. DNSを使ったトラフィックの誘導
      6. SRVレコードを使ったサービスディスカバリー
      7. DNS over HTTPS(DoH)
    3. リバースプロキシ
      1. Goによるリバースプロキシの実装
    4. CDN(Content Delivery Network)
      1. 通信そのものを高速化&安定化
      2. ユーザーに近い高機能なプロキシサーバー
      3. Cache-Statusヘッダーフィールド
      4. CDNの注意点
    5. ロードバランサー
      1. 接続ドレイン
    6. APIゲートウェイ
    7. ヘルスチェック
      1. Liveness Probe
      2. Readiness Prove
    8. バーチャル・プライベート・クラウド(VPC)
    9. マイクロサービスと認証
    10. 分散トレーシング
      1. トレース情報を子タスクに伝搬するHTTPフィールド
      2. サーバー内部の時間情報をブラウザに伝搬するフィールド
    11. そのほかの技術要素
    12. 本章のまとめ
  18. ウェブのプラットフォーム化
    1. OpenSocial
    2. ウェブフック方式
    3. スーパーアプリ
      1. スーパーアプリのアーキテクチャ
      2. ウェブビューのカスタマイズのサンプル
      3. au PAYの事例
    4. 本章のまとめ
  19. セキュリティ:ブラウザを守るHTTPの機能
    1. 従来型の攻撃
    2. ブラウザを狙う攻撃の特徴
      1. セッショントークン or クッキー
    3. クロスサイトスクリプティング(XSS)
      1. 漏洩を防ぐためのクッキーの設定
      2. Content-Security-Policyヘッダーフィールド
      3. Content-Security-PolicyとJavaScript製テンプレートエンジン
      4. Mixed Contentへの対応
    4. クロスオリジンリソースシェアリング(CORS)
    5. 中間者攻撃(MITM攻撃)
      1. HTTP Strict Transport Security(HSTS)
    6. セッションハイジャッキング
      1. 古のセッション管理とセッション固定化攻撃
      2. クッキーインジェクション
    7. クロスサイトリクエストフォージェリ(CSRF)
      1. CSRF対策トークン
      2. SameSite属性
      3. CORSの仕組みを利用
    8. クリックジャッキング
    9. リスト型アカウントハッキング
      1. パスワードのストレッチ:平文でのパスワード保存をしない
      2. 各種パスワード保管時に使うハッシュ関数
      3. パスワードのログのマスク化
      4. パスワードマネージャの利用
      5. 多要素認証(MFA)
      6. タイムベースワンタイムパスワードアルゴリズム(TOTP)
      7. 多要素認証の落とし穴
      8. PassKeys
      9. ログインをユーザーに通知
      10. メールアドレスのトラブル
    10. 脆弱性のあるコードのインジェクション
    11. ウェブアプリケーションのための参考情報
    12. ウェブの広告とプライバシー
      1. サードパーティクッキー
      2. クッキー以外の代替手段
      3. Google Analytics
      4. ユーザーを特定せずに推定する(Finger Print)
    13. 本章のまとめ
  20. 付録
    1. ステータスコード一覧
      1. 100番台(情報)
      2. 200番台(成功)
      3. 300番台(リダイレクト)
      4. 400番台(クライアントエラー)
      5. 500番台(サーバーエラー)
    2. フィールド一覧
    3. Internet ExplorerとContent-Security-Policyフィールド
      1. X-Content-Security-Policyフィールド
      2. X-XSS-Protectionフィールド
      3. X-Frame-Optionsフィールド
  21. あとがき
    1. 謝辞
  22. 著者紹介
    1. カバーの説明
  23. 奥付

Product information

  • Title: Real World HTTP 第3版 ―歴史とコードに学ぶインターネットとウェブ技術
  • Author(s): 渋川 よしき
  • Release date: April 2024
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784814400669

You might also like

book

Real World HTTP 第2版―歴史とコードに学ぶインターネットとウェブ技術

by 渋川 よしき

本書はHTTPに関する技術的な内容を一冊にまとめることを目的とした書籍です。HTTPが進化する道筋をたどりながら、ブラウザが内部で行っていること、サーバーとのやりとりの内容などについて、プロトコルの実例や実際の使用例などを交えながら紹介しています。GoやJavaScriptによるコード例によって、単純なHTTPアクセス、フォームの送信、キャッシュやクッキーのコントロール、Keep-Alive、SSL/TLS、プロトコルアップグレード、サーバープッシュ、Server-Sent Events、WebSocketなどの動作を理解します。 第2版ではHTTP/3の規格化など、初版の発行後に起きたウェブ技術への変化にともなう内容のアップデートに加え、DNSやCDN、またウェブアプリケーションの基礎など、ウェブ技術を扱うときに知っておきたい周辺技術に関する新章も追加しました。本書は、幅広く複雑なHTTPとウェブ技術に関する知識を整理するのに役立ち、また、さまざまな新しい技術をキャッチアップする一助となるでしょう。

book

実用 Git 第3版

by Prem Kumar Ponuthorai, Jon Loeliger, 萬谷 暢崇, 長尾 高弘

Gitの包括的な解説書。本書ではVCS(バージョン管理システム)の使用経験があるソフトウェアエンジニアを対象に、分散型バージョン管理システム「Git」の使い方を、リポジトリの内部やブランチの状態を示す図を多用しながら丁寧に解説します。開発時によく使われるサブコマンドだけでなく、トラブルシューティング時に使用するサブコマンドも幅広く解説します。Gitのサブコマンドの使い方だけではなく、Gitリポジトリの内部構造についても解説するので、読者はGitをより深く理解できるようになるでしょう。

book

入門 Kubernetes

by Kelsey Hightower, Brendan Burns, Joe Beda, 松浦 隼人

本書は、Kubernetesコンテナオーケストレータの核となるコンセプトから使い方までを解説するとともに、アプリケーションの開発やメンテナンスを改善するためにKubernetesとそのAPIがどのように役立つのかを説明します。はじめにKubernetesの概要と、Dockerなどのコンテナ技術を利用したアプリケーション開発の利点と使用方法について述べ、次にKubernetes自体をデプロイする方法を詳述します。そして、アプリケーションのライフサイクルに関係するDeploymentや、Kubernetesとストレージの統合について学び、実際に使われているアプリケーションをKubernetes上でデプロイする方法を紹介します。

book

SLO サービスレベル目標 ―SLI、SLO、エラーバジェット導入の実践ガイド

by Alex Hidalgo, 山口 能迪, 成田 昇司

サービスレベル目標(SLO)とは、ユーザーの満足度に強い相関があるメトリクスを用いた、開発と運用の目安となるものです。SLOに基づいた運用は、ユーザー視点で高い信頼性を持つサービスを提供する上で最も重要なプラクティスであるとともに、ビジネス指標に紐づく運用方法でもあります。本書は、SLOを導入する際に必要となる基礎概念、実装、文化を解説します。 はじめに、SLOの概要、サービスレベル指標(SLI)の設定、エラーバジェットの使い方などSLOの基本について説明します。そしてSLIとSLOの計測、確率と統計を使ったSLOの活用法、SLOを組み込むアーキテクチャやシステムについて解説します。さらに、組織内での同意の獲得やSLOの提唱など、SLOに基づくアプローチをチームや会社全体に根付かせる効果的な方法を紹介します。