ぼちぼちクラウド

クラウド系SEのぼちぼち技術ブログ

【読書記録】Webを支える技術 第3部①

第3部の構成

  • HTTPの基本:TCP/IPの基礎知識、HTTPのメッセージ構造、ステートレス性
  • HTTPメソッド:各メソッドの特徴、べき等性
  • ステータスコード:コードの分類と意味、エラー処理
  • HTTPヘッダ:ヘッダの歴史、構成内容、認証方式など

第6章 HTTPの基本

HTTPとは

  • Web上でクライアント/サーバ間でリソースをやり取りするためのプロトコル
  • RESTの特徴である統一インタフェース、ステートレスサーバ、キャッシュなどを実現し、Webの基盤となっている

TCP/IPとは

  • HTTPはTCP/IPをベースにしている
IP
  • OSI参照モデルにおけるインターネット層にあたり、ネットワークでデータを実際にやりとりする
  • データをやり取りする際は指定したIPアドレスを送り先として、パケット単位で送る
  • 自分のネットワークから送り出すところのみを保証し、送り先まで届くかどうかは保証しない
TCP
  • OSI参照モデルにおけるトランスポート層にあたり、データの送信を保証する
  • 接続先の相手にコネクションを張り、コネクションを使ってデータの抜け漏れをチェックする
  • HTTPでは80番ポートをデフォルトで使用する

HTTPのバージョン

  • 本書執筆時点で最も広く使用されているバージョンはHTTP1.1

※すでにHTTP2や3が出ている時代なので、詳細は割愛します(本記事は初版2010年発行、2022年に発行された第16刷をもとに執筆)

HTTPの仕組み①クライアントとサーバ

  • クライアント・・・Webブラウザ
  • サーバ・・・Webサーバ。情報を提供
  • クライアントがサーバに接続する際にリクエスを出してサーバからレスポンスを受け取る(リクエスト/レスポンス型)

HTTPの仕組み②リクエストとレスポンス

  • リクエスト後、クライアントはレスポンスが返るまで待機する(同期型)
  • URLをたたいてWebサイトにアクセスした際の処理の流れを下記に記載
クライアント側
  1. DNSを使ってURLからホスト名を名前解決し、取得したIPアドレスのTCP80番ポートに接続し、リクエストを送信する
  2. レスポンスメッセージを受信
  3. 解析し、さらにリクエスト発行が必要なら繰り返す(画像やスタイルシートへのリンクが含まれている場合など)
  4. 返ってきたHTMLをレンダリングしてウィンドウに表示する
サーバ側
  1. リクエストメッセージを受信したら解析
  2. 該当ページのHTMLをレンダリングするアプリケーションに処理を委譲し、結果のHTMLを取得
  3. ヘッダを付加してレスポンスメッセージを構築
  4. レスポンスメッセージをクライアントに返す

HTTPの仕組み③HTTPメッセージ

リクエストメッセージ
  • 1行目は「リクエストライン」
  1. メソッド(GETなど)
  2. リクエスURI(/test?debug=true~~~)
  3. バージョン(HTTP/1.1)

※複数のヘッダを持つことができる
※省略可能

  1. 「名前:値」という形式
  2. Hostヘッダ(必須) (Host: example.jp:8080) ←ポート番号を指定
  • ボディが続くこともある(更新するリソースなど) ※省略可能
レスポンスメッセージ
  • 1行目は「ステータスライン」
  1. バージョン(HTTP/1.1)
  2. ステータスコード(200など) ←リクエスト成功時
  3. テキストフレーズ(OKなど)
  • 2行目以降は「ヘッダ」 ※省略可能
  • ボディが続くこともある(HTMLなど) ※省略可能
  • ヘッダとボディは空行で区切られる

HTTPの仕組み④ステートレス性

  • HTTPはステートレスの仕組みを採用している
ステートフル
  • 簡潔
  • サーバがそれまでのクライアントのリクエストを覚えている(われわれ人間の会話もステートフル)
ステートレス
  • 冗長
  • クライアントは毎回それまでのリクエストも含め、繰り返しリクエストする