【Webを支える技術】第3部 HTTP 学習メモ

 

目次

はじめに

この記事は「Webを支える技術」を読んで自分なりにまとめた学習メモです。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

 

第3部 HTTP 

第6章 HTTPの基本

HTTP(Hyper Text Transfer Protocol)

HTTPとは、TCP/IPをベースとした Web 上でやりとりするリソースの表現を、クライアントとサーバの間でやりとりするためのプロトコルです。

 

TCP/IP(Transmission Control Protocol / Internet Protocol)

TCP/IPとは、インターネットの基盤を構成する重要なネットワークプロトコルです。

 

プロトコル

プロトコルとは、コンピューター同士が通信をする際の手順や規約などの約束事。

 

階層型プロトコル

インターネットのネットワークプロトコルは階層型になっています。

アプリケーション層
トランスポート層
インターネット層
ネットワークインタフェース層

 

クライアントで行われること

  1. リクエストメッセージの構築
  2. リクエストメッセージの送信
  3. (レスポンスが返るまで待機)
  4. レスポンスメッセージの受信
  5. レスポンスメッセージの解析
  6. クライアントの目的を達成するために必要な処理

 

サーバで行われること

  1. (リクエストの待機)
  2. リクエストメッセージの受信
  3. リクエストメッセージの解析
  4. 適切なアプリケーションプログラムへの処理の委譲
  5. アプリケーションプログラムから結果を取得
  6. レスポンスメッセージの送信

 

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 ―― ボディの長さを指定する
  • チャンク転送 ―― ボディを分割して転送する

 

認証

  • Basic認証 ―― ユーザ名とパスワードによる認証方式
  • Digest認証 ―― Basic認証よりもセキュアな認証方式
  • WSSE認証 ―― HTTP 1.1の標準外の認証方式

 

HTTPSとは、HTTPSSL/TLSを組み合わせた通信の総称です。通信路を暗号化してクライアントとサーバの間でやりとりするデータを保護し、盗聴を防ぐ目的で主に利用します。HTTPSのデフォルトポート番号は443です。

SSL/TLSとは、インターネット上で通信を暗号化する技術のことです。

SSL/TLSの3つの機能

  • 暗号化:共通鍵暗号に基づく暗号化機能
  • 認証:公開鍵証明書に基づく認証機能
  • 改ざん検知:ハッシュ用共通鍵に基づく改ざん検知機能

 

キャッシュ

キャッシュとは、サーバから取得したリソースをローカルストレージ(ハードディスクなど)に蓄積し、再利用する手法のことです。

  • Pragma ―― キャッシュを抑制する
  • Expires ―― キャッシュの有効期限を示す
  • Cache-Control ―― 詳細なキャッシュ方法を指定する
  • If-None-Match ―― リソースの Etag を条件にする

 

そのほかのHTTPヘッダ

  • Content-Disposition ―― ファイル名を指定する
  • Slug ―― ファイル名のヒントを指定する