HTTPヘッダーフィールド4

リクエストヘッダーフィールド

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ヘッダーフィールドは、ユーザーエージェントが処理できるコンテンツコーディングと、コンテンツコーディングの相対的な優先度を伝えるために使われる

  • コンテンツコーディングも一度に複数指定できる

  • コンテンツコーディングの例

    gzipGNU zipで作られるエンコーディングフォーマット
    compresscompressで作られるエンコーディングフォーマット
    identity圧縮や変形しないデフォルトエンコーディングフォーマット


    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"レスポンスで、リソース全体を返す

  • Referer

  • リクエストが発生した元のリソースの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(上野宣)