【Webを支える技術】第3部 HTTP 学習メモ
目次
はじめに
この記事は「Webを支える技術」を読んで自分なりにまとめた学習メモです。
Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)
- 作者: 山本陽平
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/08
- メディア: 単行本(ソフトカバー)
- 購入: 143人 クリック: 4,320回
- この商品を含むブログ (183件) を見る
第3部 HTTP
第6章 HTTPの基本
HTTP(Hyper Text Transfer Protocol)
HTTPとは、TCP/IPをベースとした Web 上でやりとりするリソースの表現を、クライアントとサーバの間でやりとりするためのプロトコルです。
TCP/IP(Transmission Control Protocol / Internet Protocol)
TCP/IPとは、インターネットの基盤を構成する重要なネットワークプロトコルです。
プロトコル
プロトコルとは、コンピューター同士が通信をする際の手順や規約などの約束事。
階層型プロトコル
インターネットのネットワークプロトコルは階層型になっています。
アプリケーション層 |
トランスポート層 |
インターネット層 |
ネットワークインタフェース層 |
クライアントで行われること
サーバで行われること
HTTPメッセージ
▶ リクエストメッセージ
- リクエストライン
- ヘッダ
- メッセージのメタデータ
- ボディ
- メッセージを表す本質的な情報
▶ レスポンスメッセージ
- ステータスライン
- ヘッダ
- メッセージのメタデータ
- ボディ
- メッセージを表す本質的な情報]
▶ HTTPメッセージの構造
スタートライン |
ヘッダ |
空行 |
ボディ |
HTTPのステートレス性
HTTPはステートレスなプロトコルとして設計されています。
ステートレスとは、「サーバがクライアントのアプリケーション状態を保存しない」制約のことです。
アプリケーション状態(セッション状態:Session State)とは、システムの一連の操作の間の状態のことです。
- ステートフルなやりとりは簡潔
- ステートレスなやりとりは冗長
- ステートフルなやりとりでは、サーバがクライアントのそれまでの注文を覚えている
- ステートレスなやりとりでは、クライアントは毎回すべての注文を繰り返している
第7章 HTTPメソッド
8つのメソッド
メソッド | 意味 |
---|---|
GET | リソースの取得 |
POST | 子リソースの作成、リソースへのデータの追加、そのほかの処理 |
PUT | リソースの更新、リソースの作成 |
DELETE | リソースの削除 |
HEAD | リソースのヘッダ(メタデータ)の取得 |
OPTIONS | リソースがサポートしているメソッドの取得 |
TRACE | 自分宛にリクエストメッセージを返す(ループバック)試験 |
CONNECT | プロキシ動作のトンネル接続への変更 |
HTTPメソッドとCRUD
HTTPメソッドのうちGET、POST、PUT、DELETEは、これら4つで「CRUD(クラッド)」という性質を満たすため、代表的なメソッドと言えます。
第8章 ステータスコード
ステータスコード(Status Code)
ステータスコードとは、HTTPにおいてWebサーバからのレスポンスの意味を表現する3桁の数字からなるコードのことです。
ステータスコードの分類
- 1xx:処理中
- 2xx:成功
- 3xx:リダイレクト
- 4xx:クライアントエラー
- 5xx:サーバエラー
よく使われるステータスコード
- 200 OK ―― リクエスト成功
- 201 Created ―― リソースの作成成功
- 301 Moved Permanently ―― リソースの恒久的な移動
- 303 See Other ―― 別URIの参照
- 400 Bad Request ―― リクエストの間違い
- 401 Unauthorized ―― アクセス権不正
- 500 Internal Server Error ―― サーバ内部エラー
- 503 Service Unavailabel ―― サービス停止
第9章 HTTPヘッダ
HTTPヘッダ
HTTPヘッダとは、メッセージのボディに対する付加的な情報、いわゆるメタデータのことです。
日時
例:Date: Tue, 06 Jul 2010 03:21:05 GMT
MIME(Multipurpose Internet Mail Extensions)
メッセージでやりとりするリソースの表現の種類を指定するのがMIMEメディアタイプです。
タイプ
タイプ | 意味 | 例 |
---|---|---|
text | 人が読んで直接理解できるテキスト | text/plain |
image | 画像データ | image/jpeg |
audio | 音声データ | audio/mpeg |
video | 映像データ | video/mp4 |
application | そのほかのデータ | application/pdf |
multipart | 複数のデータからなる複合データ | multipart/related |
message | 電子メールメッセージ | message/rfc822 |
model | 複数次元で構成するモデルデータ | model/vrml |
example | 例示用 | example/foo-bar |
言語タグ(Content-Language)
言語タグとは、 リソース表現の自然言語を指定するヘッダのことです。
コンテントネゴシエーション(Content Negotiation)
コンテントネゴシエーションとは、メディアタイプや文字エンコーディング、言語タグをクライアントと交渉(ネゴシエーション)して決める手法のことです。
- Accept ―― 処理できるメディアタイプを伝える
- Accept-Charset ―― 処理できる文字コーディングを伝える
- Accept-Language ―― 処理できる言語を伝える
Content-Lengthとチャンク転送
- Content-Length ―― ボディの長さを指定する
- チャンク転送 ―― ボディを分割して転送する
認証
HTTPSとは、HTTPとSSL/TLSを組み合わせた通信の総称です。通信路を暗号化してクライアントとサーバの間でやりとりするデータを保護し、盗聴を防ぐ目的で主に利用します。HTTPSのデフォルトポート番号は443です。
SSL/TLSとは、インターネット上で通信を暗号化する技術のことです。
- 暗号化:共通鍵暗号に基づく暗号化機能
- 認証:公開鍵証明書に基づく認証機能
- 改ざん検知:ハッシュ用共通鍵に基づく改ざん検知機能
キャッシュ
キャッシュとは、サーバから取得したリソースをローカルストレージ(ハードディスクなど)に蓄積し、再利用する手法のことです。
- Pragma ―― キャッシュを抑制する
- Expires ―― キャッシュの有効期限を示す
- Cache-Control ―― 詳細なキャッシュ方法を指定する
- If-None-Match ―― リソースの Etag を条件にする
そのほかのHTTPヘッダ
- Content-Disposition ―― ファイル名を指定する
- Slug ―― ファイル名のヒントを指定する