Webとデザインのあれこれ

プログラミングとUIデザインの学習記録です。

HTTPの基本の基本3

HTTPヘッダについて

HTTPヘッダの役割

ヘッダの重要性

  1. メタデータの表現
  2. リソースへのアクセス権を設定する認証
  3. クライアントとサーバの通信回数を減らすキャッシュの機能

メッセージのボディに対する付加的な情報、いわゆるメタデータを表現する役割を果たす。 クライアントやサーバはヘッダを見てメッセージに対する挙動を決定する。

ヘッダの中身

  • 日時 値に日時を持つヘッダ。
Date: Tue, 06 Jul 2010 03:21:05 GMT
  • MIMEメディアタイプ
    メッセージでやりとりするリソースの表現の種類を指定する。
    • Content-Type(メディアタイプを指定する)
Content-Type: application/xhtml+xml; charset=utf-8  

text, image, audio, video, application(その他のデータ)などを指定する。

Content-Type: application/xml; charset=utf-8

上記のようにメディアタイプとcharsetパラメータを指定する記述が推奨される。

  • 言語タグ(Language Tag)
Content-Language; ja-JP

メディアタイプや文字のエンコーディング、言語タグをサーバーが一方的に決定するだけでなく。クライアントと交渉して決定することも可能。

Accept: application/xml, application/msword;q = 0.9 #メディアタイプを指定
  • Content-Lengthとチャンク転送

    • Content-Length(ボディの長さを指定する)
    • チャンク転送(ボディを分割して転送する)
Content-Length: 5538

動的に画像を生成するようなWebサービスの場合など、ファイルサイズが決定されるまでレスポンスが返せないので応答性能が低下する。 そのようなケースでは、Transfer-Encodingヘッダを用いると最終的なサイズがわからないボディを少しずつ転送できる。

Transfer-Encoding: chunked

ユーザのアクセス認証について

HTTP認証方式には、主にBasic認証とDigest認証がある。

  • Basic認証:ユーザ名とパスワードによる認証方式。

ユーザ名とパスワードをAuthorizationヘッダでリクエストごとに送信する。ユーザ名とパスワードが平文でネットワーク上を流れるため、HTTPS通信などの検討が必要となる
。

  • Digest認証:Basic認証よりもセキュアな認証方式。

Digestとはメッセージダイジェストの略で、あるメッセージに対してハッシュ関数を適用したハッシュ値のこと。

流れとしては、

  1. クライアントはまず認証情報なしでリクエストを送信する
  2. そのレスポンスの情報・ユーザ名・パスワードを使ってダイジェストを生成して、それをリクエストとして送信して送信する。

メリット

  • パスワードを盗まれる危険性がない
  • サーバ上にハッシュ値のみを保管しておけば良いのでセキュリティリスクが低い

デメリット

  • メッセージ自体が平文でネットワーク上に流れる(メッセージ自体を暗号化したければHTTPSを利用するべき)
  • 毎回はじめに認証情報なしでリクエストを送信して、401 Unauthorizedレスポンスを得なければいけない

キャッシュについて

HTTPの重要な機能の一つで、サーバから取得したリソースをローカルストレージに蓄積して再利用すること。

クライアントに蓄積したキャッシュは、そのキャッシュが有効な間、クライアントが再度リソースにアクセスしようとした時に 再利用する。

有効期限がいつまでなのかについては、以下の3種類のヘッダを用いてサーバが指定する。

  • Pragma(キャッシュを抑制する)
  • Expires(キャッシュの有効期限を示す)
  • Cache-Control(詳細なキャッシュ方法を指定する)
Pragma: no-cache #リソースをキャッシュしてはならないことを示す
Cache-Control: max-age: 86400 #86400秒、つまり24時間キャッシュが新鮮であることを示す

最後に

以上です!

参考資料

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