リクエストヘッダーフィールド
Accept
Accept: text/plain; q=0.5, text/html
Acceptヘッダーフィールドは、ユーザーエージェントが処理できるメディアタイプと、メディアタイプの相対的な優先度を伝えるために使われる。メディアタイプ
テキストファイル
text/html, text/plain, text/css
画像ファイル
image/jpeg, image/gif, imag/png
動画ファイル
video/mpeg, video/quicktime
アプリケーション用バイナリファイル
application/octet-stream, application/zip
表示するメディアタイプに優先度をつけたい場合は、セミコロンで区切り、"q=" で表す品質係数を加える
品質係数は0 〜 1の範囲の数値(小数点3桁)で、1の方が高い。
品質係数の指定がない場合は、暗黙に "q=1.0" を表す
Accept-Charset
Accept-Charsetヘッダーフィールドは、ユーザーエージェントが処理できる文字セットと、文字セットの相対的な優先度を伝えるために使用される。
文字セットの指定は、一度に複数できる
品質係数によって相対的な優先度を表す
サーバー駆動型ネゴシエーションに利用される
Accept-Encoding
Accept-Encodingヘッダーフィールドは、ユーザーエージェントが処理できるコンテンツコーディングと、コンテンツコーディングの相対的な優先度を伝えるために使われる
コンテンツコーディングも一度に複数指定できる
コンテンツコーディングの例
Accept-Language
Accept-Language: ja, en;q=0.5
Accept-Languageヘッダーフィールドは、ユーザーエージェントが処理できる自然言語のセットと自然言語セットの相対的な優先度を伝えるために使われる。自然言語セットの指定は一度に複数できる
品質係数によって相対的な優先度を表す
Authorization
Authorization: Basic hoHJjdfaDj43d
Authorizationヘッダーフィールドは、ユーザーエージェントの認証情報(credentials値)を伝えるために使われる
サーバーに認証を受けようとするユーザーエージェントは、ステータスコード401レスポンスの後のリクエストにAuthorizationヘッダーフィールドを含める
共有キャッシュがAuthorizationヘッダーフィールドを含むリクエストを受けると、動作が異なる
Expect
Expect: 100-continue
Expectヘッダーフィールドは、クライアントがサーバーに特定の振る舞いを要求していることを伝える
期待されている要求にサーバーが応えられないでエラーになると、ステータスコード"417 Expectation Failed"を返す
HTTP/1.1の仕様では、"100-continue"しか定義されていないFrom
ユーザーエージェントを使っているユーザーのメールアドレスを伝える
ロボットエージェントの責任者へ連絡先のメールアドレスを伝える目的で使われる
ロボットエージェントによっては、User-Agentヘッダーフィールドにメールアドレスを含んでいるものもある
Host
Hostヘッダーフィールドは、リクエストしたリソースのインターネットホストとポート番号を伝える
HTTP/1.1では、唯一の必須ヘッダーフィールド
バーチャルホストは、同一のIPアドレスで運用されているので、Hostヘッダーフィールドでリクエスト先を見分ける
If-Match
条件付きリクエスト
If-Match |
If-Modified-Since |
If-None-Match |
If-Range |
If-Unmodified-Since |
"If-xxx"という書式のリクエストヘッダーフィールドは、条件付きリクエスト
条件付きリクエストを受け取ったサーバーは、指定された条件が真の場合にのみリクエストを受け付ける
GET / HTTP/1.1
If-Match: "0000000"
If-Matchを使用したときは、弱いETag値を使用することはできない
サーバーは、If-Matchのフィールド値と、リソースのETag値が一致した場合にのみリクエストを受け付ける
ETag値が一致しないと、ステータスコード"412 Precondition Failed"レスポンスを返す
If-Matchのフィールド値には、"*"を指定することもできる。この場合、ETag値に関わらずリソースがあればリクエストを処理できる
If-Modified-Since
GET / HTTP/1.1
If-Modified-Since: Sun, 10 Feb 2001 00:00:00 GMT
リソースの更新日時がフィールド値より新しければ、リクエストを受け付けて欲しいと伝える
フィールド値に指定した日時以降に、指定したリソースが更新されていなければ、ステータスコード "304 Not Modified"レスポンスを返す
If-Modified-Since は、プロキシやクライアントがローカルにもっているリソースの有効性を確かめるために使われる
取得したリソースの更新日時は、Last-Modifiedヘッダーフィールドを確認すればわかる
If-None-Match
If-Matchヘッダーフィールドの逆の働き
If-None-Matchのフィールド値と、ETagが一致しなかった場合のみリクエストを受け付ける
If-Range
If-Rangeで指定したフィールド値(ETag値、または日時)と、指定したリソースのETag値または日時が一致したらレンジリクエストとして処理して欲しいということを伝える
If-Rangeのフィールド値と、ETag値または日時が一致しなければ、リソース全体を返す
If-Rangeヘッダーフィールドを使わないと、リクエスト、レスポンスのやり取りが2回必要になる
If-Unmodified-Since
If-Modified-Sinceヘッダーフィールドと逆の働きをする
指定したリソースが、フィールド値に指定した日時以降に更新されていないときだけ、リクエストを受け付けるように伝える
指定した日時以降に更新されていたら、ステータスコード"412 Precondition Failed"レスポンスを返す
Max-Forwards
Max-Forwardsヘッダーフィールドは、TRACEまたはOPTIONSメソッドによるリクエストの際に転送してもよいサーバー数の最大値を10進数の整数で指定する
サーバーは、次のサーバーにリクエストを転送するときに、Max-Forwardsの値から1引いたものをセットし直す
Max-Forwardsの値が0のリクエストを受け取った場合には、転送せずにレスポンスを返す
Proxy-Authorization
Proxy-Authorization: Basic jKJhgdhgUdga
Proxy-Authorizationヘッダーフィールドは、プロキシサーバーからの認証要求を受け取ったときに、認証に必要なクライアントからの情報を伝える
クライアント、サーバーのHTTPアクセス認証との違いは、クライアントとプロキシの間で認証が行われるということ
クライアント、サーバーのAuthorizationヘッダーフィールドと同じ役割を持つ
Range
Range: bytes=1001-2000
Rangeヘッダーフィールドは、リソースの一部分だけを取得するレンジリクエストをするときに指定範囲を伝える
Rangeヘッダーフィールド付きのリクエストを受け取ったサーバーがリクエストを処理するとき、ステータスコード"206 Partial Content"レスポンスを返す
サーバーがRangeヘッダーフィールドを処理できない場合は、ステータスコード"200 OK"レスポンスで、リソース全体を返す
リクエストが発生した元のリソースのURIを伝える
基本的にRefererヘッダーフィールドは送られるべきものだが、セキュリティ上おくないと判断した場合は、送らなくてもよい
「はてなダイアリー」やRubyによるブログシステムの「tDiary」では、どのサイトのハイパーリンクからアクセスしてきたのかが分かるようにRefererを表示する機能がある
Refererのスペリングは"Referrer"が正しいが、HTTPヘッダーフィールドでは、"Referer"となっている
TE
TE: gzip, deflate;q=0.5
TEヘッダーフィールドは、レスポンスに受け入れ可能な転送コーディングの形式と、相対的な優先度を伝える
Accept-Encodingは、ユーザーエージェントが処理できる内容コーディングとその相対的な優先度を伝えるが、TEヘッダーフィールドは、転送コーディングとその相対的な優先度を伝える
TEヘッダーフィールドは、転送コーディングの指定以外に、トレーラーフィールドを伴うチャンク転送エンコーディング形式を指定することができる
TE: trailers
User-Agent
リクエストを生成したユーザーエージェントの名前などを伝える
ロボットエージェントからのリクエストには、ロボットエージェントの責任者のメールアドレスが付け加えられることもある
プロキシ経由のリクエストには、プロキシサーバーに名前なども付け加えられることもある
参考文献:今夜わかるHTTP(上野宣)