Security-testing-http-headerfields
セキュリティテスト-HTTPヘッダーフィールド
HTTPヘッダーフィールド
HTTPヘッダーフィールドは、要求または応答、またはメッセージ本文で送信されるオブジェクトに関する必要な情報を提供します。 HTTPメッセージヘッダーには4つのタイプがあります-
- General-header -これらのヘッダーフィールドには、要求メッセージと応答メッセージの両方に一般的な適用性があります。
- Client Request-header -これらのヘッダーフィールドは、要求メッセージにのみ適用可能です。
- Server Response-header -これらのヘッダーフィールドは、応答メッセージにのみ適用可能です。
- Entity-header -これらのヘッダーフィールドは、エンティティ本体に関するメタ情報を定義します。または、本体が存在しない場合は定義します。
一般的なヘッダー
一般的なヘッダーについて詳しく見ていきましょう。
キャッシュ制御
Cache-Control general-headerフィールドは、すべてのキャッシングシステムが従う必要があるディレクティブを指定するために使用されます。 構文は次のとおりです-
HTTPクライアントまたはサーバーは、 Cache-control 汎用ヘッダーを使用して、キャッシュのパラメーターを指定したり、キャッシュから特定の種類のドキュメントを要求したりできます。 キャッシングディレクティブは、コンマ区切りリストで指定されます。 たとえば-
HTTP要求でクライアントが使用できる次の重要なキャッシュ要求ディレクティブがあります-
S.No. | Cache Request Directive and Description |
---|---|
1 |
no-cache キャッシュは、元のサーバーとの再検証が成功しない限り、後続の要求を満たすために応答を使用してはなりません。 |
2 |
no-store キャッシュには、クライアントのリクエストやサーバーの応答に関する情報を保存しないでください。 |
3 |
max-age = seconds クライアントが、指定された時間(秒単位)を超えない応答を受け入れることを示します。 |
4 |
max-stale [ = seconds ] 有効期限を超えた応答をクライアントが受け入れようとしていることを示します。 秒が指定されている場合、その時間以上に期限切れになってはいけません。 |
5 |
min-fresh = seconds クライアントが、フレッシュネスライフタイムが現在の経過時間に指定された時間(秒単位)を加えた値以上の応答を受け入れることを示します。 |
6 |
no-transform エンティティ本体を変換しないでください。 |
7 |
only-if-cached 新しいデータを取得しないでください。 キャッシュは、ドキュメントがキャッシュ内にある場合にのみドキュメントを送信でき、新しいコピーが存在するかどうかを確認するために配信元サーバーに接続しないでください。 |
HTTP応答でサーバーが使用できる次の重要なキャッシュ応答ディレクティブがあります-
S.No. | Cache Request Directive and Description |
---|---|
1 |
public 応答が任意のキャッシュによってキャッシュされる可能性があることを示します。 |
2 |
private 応答メッセージのすべてまたは一部が単一のユーザー向けであり、共有キャッシュによってキャッシュされてはならないことを示します。 |
3 |
no-cache キャッシュは、元のサーバーとの再検証が成功しない限り、後続の要求を満たすために応答を使用してはなりません。 |
4 |
no-store キャッシュには、クライアントのリクエストやサーバーの応答に関する情報を保存しないでください。 |
5 |
no-transform エンティティ本体を変換しないでください。 |
6 |
must-revalidate キャッシュは、使用する前に古いドキュメントのステータスを確認する必要があり、期限切れのドキュメントは使用しないでください。 |
7 |
proxy-revalidate proxy-revalidateディレクティブは、非共有ユーザーエージェントキャッシュに適用されないことを除いて、must-revalidateディレクティブと同じ意味を持ちます。 |
8 |
max-age = seconds クライアントが、指定された時間(秒単位)を超えない応答を受け入れることを示します。 |
9 |
s-maxage = seconds このディレクティブで指定された最大年齢は、max-ageディレクティブまたはExpiresヘッダーで指定された最大年齢を上書きします。 s-maxageディレクティブは、プライベートキャッシュによって常に無視されます。 |
接続
Connection general-headerフィールドを使用すると、送信者はその特定の接続に必要なオプションを指定でき、プロキシはそれ以上の接続で通信することはできません。 以下は、接続ヘッダーを使用する簡単な構文です-
HTTP/1.1は、送信者が「完了」接続オプションを定義して、応答の完了後に接続が閉じられることを通知します。 たとえば-
デフォルトでは、HTTP 1.1は永続的な接続を使用します。この場合、接続はトランザクション後に自動的に閉じられません。 一方、HTTP 1.0には、デフォルトでは永続的な接続がありません。 1.0クライアントが永続的な接続を使用したい場合、それは次のように*キープアライブ*パラメータを使用します-
Date
すべてのHTTP日付/時刻スタンプは、例外なくグリニッジ標準時(GMT)で表されなければなりません。 HTTPアプリケーションは、日付/時刻スタンプの次の3つの表現のいずれかを使用することが許可されています-
ここでは、最初の形式が最も優先されます。
プラグマ
Pragma general-headerフィールドは、要求/応答チェーンに沿った受信者に適用される可能性のある実装固有のディレクティブを含めるために使用されます。 たとえば-
HTTP/1.0で定義されている唯一のディレクティブはno-cacheディレクティブであり、下位互換性のためにHTTP 1.1で維持されています。 将来、新しいプラグマディレクティブは定義されません。
トレーラー
Trailer一般フィールド値は、ヘッダーフィールドの指定されたセットが、チャンク転送コーディングでエンコードされたメッセージのトレーラに存在することを示します。 以下は、Trailerヘッダーフィールドを使用する簡単な構文です-
Trailerヘッダーフィールドにリストされているメッセージヘッダーフィールドには、次のヘッダーフィールドを含めることはできません-
- 転送エンコード
- コンテンツ長
- トレーラー
転送エンコード
Transfer-Encoding general-headerフィールドは、送信者と受信者の間で安全に転送するために、メッセージ本文に適用された変換のタイプを示します。 transfer-encodingはエンティティ本体ではなくメッセージのプロパティであるため、これはcontent-encodingとは異なります。 次の構文は、Transfer-Encodingヘッダーフィールドの使用を示しています-
すべての転送コーディング値は大文字と小文字を区別しません。
アップグレード
_Upgrade_ジェネラルヘッダーを使用すると、クライアントは、サポートする追加の通信プロトコルを指定し、サーバーがプロトコルの切り替えに適していると判断した場合に使用することを指定できます。 たとえば-
Upgradeヘッダーフィールドは、HTTP/1.1から他の互換性のないプロトコルへの移行のためのシンプルなメカニズムを提供することを目的としています
Via
Via general-headerは、中間プロトコルと受信者を示すためにゲートウェイとプロキシによって使用される必要があります。 たとえば、HTTP/1.0ユーザーエージェントから「fred」というコード名の内部プロキシに要求メッセージを送信できます。このプロキシは、HTTP/1.1を使用してnowhere.comのパブリックプロキシに要求を転送します。 [[1]] www.ics.uci.eduが受信したリクエストには、次のViaヘッダーフィールドがあります-
Upgradeヘッダーフィールドは、HTTP/1.1から他の互換性のないプロトコルへの移行のためのシンプルなメカニズムを提供することを目的としています
警告
Warning general-headerは、メッセージに反映されない可能性のあるメッセージのステータスまたは変換に関する追加情報を伝えるために使用されます。 応答には、複数の警告ヘッダーが含まれる場合があります。
クライアントリクエストヘッダー
受け入れる
Accept request-headerフィールドを使用して、応答に受け入れられる特定のメディアタイプを指定できます。 以下は一般的な構文です-
複数のメディアタイプをカンマで区切ってリストできます。オプションのqvalueは、0〜1のスケールの受け入れタイプの許容品質レベルを表します。 以下は例です-
これは、 text/html および text/xc が優先メディアタイプであると解釈されますが、存在しない場合は text/x-dvi エンティティを送信し、存在しない場合は送信します text/plain エンティティ。
受け入れ文字セット
Accept-Charset request-headerフィールドを使用して、応答に受け入れられる文字セットを示すことができます。 以下は一般的な構文です-
複数の文字セットをコンマで区切ってリストできます。オプションのqvalueは、0〜1のスケールでの非優先文字セットの許容品質レベルを表します。 以下は例です-
受け入れエンコード
Accept-Encoding request-headerフィールドはAcceptに似ていますが、応答で受け入れられるコンテンツコーディングを制限します。 以下は一般的な構文です-
以下は例です-
受け入れ言語
Accept-Language request-headerフィールドはAcceptに似ていますが、リクエストへの応答として優先される自然言語のセットを制限します。 以下は一般的な構文です-
複数の言語をコンマで区切ってリストできます。オプションのqvalueは、0〜1のスケールでの非優先言語の許容品質レベルを表します。 以下は例です-
承認
Authorization request-headerフィールド値は、要求されているリソースのレルムのユーザーエージェントの認証情報を含む資格情報で構成されます。 以下は一般的な構文です-
HTTP/1.0仕様では、BASIC認可スキームが定義されています。認可パラメータは、base 64でエンコードされた username:password の文字列です。 以下は例です-
デコードされる値は guest:guest123 です。 guest はユーザーID、 guest123 はパスワードです。
クッキー
Cookie request-headerフィールドの値には、そのURLに保存されている情報の名前と値のペアが含まれています。 以下は一般的な構文です-
次のように、複数のクッキーをセミコロンで区切って指定できます-
期待する
Expect request-headerフィールドは、特定のサーバーの動作がクライアントに必要であることを示すために使用されます。 以下は一般的な構文です-
サーバーが、サポートしていないExpectation-Extensionを含むExpectフィールドを含む要求を受信した場合、417(Expectation Failed)ステータスで応答する必要があります。
From
From request-headerフィールドには、要求元のユーザーエージェントを制御する人間のユーザーのインターネット電子メールアドレスが含まれています。 以下は簡単な例です-
このヘッダーフィールドは、ロギングの目的で、無効または不要なリクエストのソースを識別する手段として使用できます。
Host
Host request-headerフィールドは、要求されているリソースのインターネットホストとポート番号を指定するために使用されます。 以下は一般的な構文です-
末尾のポート情報のない host は、デフォルトのポートである80を意味します。 たとえば、_http://www.w3.org/pub/WWW/_のオリジンサーバでのリクエストは-
一致する場合
If-Match request-headerフィールドは、条件付きにするメソッドとともに使用されます。 このヘッダーは、このタグの特定の値が ETag で表される特定のエンティティタグと一致する場合にのみ、要求されたメソッドを実行するようサーバーに要求します。 以下は一般的な構文です-
アスタリスク(*)は任意のエンティティに一致し、トランザクションはエンティティが存在する場合にのみ続行されます。 以下は可能な例です-
一致するエンティティタグがない場合、または「*」が指定されていて現在のエンティティが存在しない場合、サーバーは要求されたメソッドを実行してはならず、412(前提条件失敗)応答を返す必要があります。
If-Modified-Since
If-Modified-Since request-headerフィールドは、条件付きにするメソッドとともに使用されます。 このフィールドで指定された時間以降に要求されたURLが変更されていない場合、エンティティはサーバーから返されません。代わりに、メッセージ本文なしで304(変更なし)応答が返されます。 以下は一般的な構文です-
フィールドの例は-
一致するエンティティタグがない場合、または「*」が指定されていて現在のエンティティが存在しない場合、サーバーは要求されたメソッドを実行してはならず、412(前提条件失敗)応答を返す必要があります。
If-None-Match
If-None-Match request-headerフィールドは、条件付きにするメソッドとともに使用されます。 このヘッダーは、このタグの特定の値のいずれかが ETag で表される特定のエンティティタグと一致する場合にのみ、要求されたメソッドを実行するようサーバーに要求します。 以下は一般的な構文です-
アスタリスク(*)は任意のエンティティと一致し、トランザクションはエンティティが存在しない場合にのみ続行されます。 以下は可能な例です-
If範囲
If-Range request-headerフィールドを条件付きGETで使用して、変更されていない場合はエンティティの一部のみを変更し、変更されている場合はエンティティ全体を要求できます。 以下は一般的な構文です-
エンティティタグまたは日付を使用して、すでに受信した部分エンティティを識別できます。 たとえば-
ここで、指定された日付以降にドキュメントが変更されていない場合、サーバーはRangeヘッダーで指定されたバイト範囲を返します。
未修正の場合
If-Unmodified-Since request-headerフィールドは、条件付きにするメソッドとともに使用されます。 以下は一般的な構文です-
このフィールドで指定された時間以降に要求されたリソースが変更されていない場合、サーバーはIf-Unmodified-Sinceヘッダーが存在しないかのように要求された操作を実行する必要があります。 たとえば-
要求が通常2xxまたは412ステータス以外の結果になる場合、_If-Unmodified-Since_ヘッダーは無視する必要があります。
マックスフォワード
Max-Forwards request-headerフィールドは、リクエストを次のインバウンドサーバーに転送できるプロキシまたはゲートウェイの数を制限するためのTRACEおよびOPTIONSメソッドを備えたメカニズムを提供します。 以下は一般的な構文です-
Max-Forwards値は、この要求メッセージを転送できる残りの回数を示す10進整数です。 これは、TRACEメソッドを使用したデバッグに役立ち、無限ループを回避します。 たとえば-
HTTP仕様で定義されている他のすべてのメソッドでは、Max-Forwardsヘッダーフィールドは無視される場合があります。
プロキシ承認
Proxy-Authorization request-headerフィールドを使用すると、クライアントは認証を必要とするプロキシに対して自分自身(またはそのユーザー)を識別できます。 以下は一般的な構文です-
Proxy-Authorizationフィールドの値は、リクエストされているリソースのプロキシまたはレルムのユーザーエージェントの認証情報を含む資格情報で構成されます。
範囲
Range request-headerフィールドは、ドキュメントから要求されたコンテンツの部分的な範囲を指定します。 以下は一般的な構文です-
byte-range-specのfirst-byte-pos値は、範囲の最初のバイトのバイトオフセットを示します。 last-byte-pos値は、範囲内の最後のバイトのバイトオフセットを示します。つまり、指定されたバイト位置は包括的です。 バイト単位でバイトオフセットをゼロから開始するように指定できます。 以下は簡単な例です-
複数の範囲をコンマで区切ってリストできます。 コンマで区切られたバイト範囲の最初の数字が欠落している場合、範囲はドキュメントの最後からカウントされると想定されます。 2番目の数字が欠落している場合、範囲はバイトnから文書の終わりまでです。
リファラー
Referer request-headerフィールドを使用すると、クライアントはURLが要求されたリソースのアドレス(URI)を指定できます。 以下は一般的な構文です-
以下は簡単な例です-
フィールド値が相対URIである場合、_Request-URI_を基準にして解釈する必要があります。
TE
TE request-headerフィールドは、応答でどの拡張_transfer-coding_を受け入れるか、およびチャンク_transfer-coding_のトレーラフィールドを受け入れるかどうかを示します。 以下は一般的な構文です-
キーワード「トレーラー」の存在は、クライアントがチャンク転送コーディングでトレーラーフィールドを受け入れる意思があることを示し、それはいずれかの方法で指定されています-
TEフィールド値が空の場合、またはTEフィールドが存在しない場合、転送コーディングは_chunked_のみです。 転送コーディングのないメッセージは常に受け入れられます。
ユーザーエージェント
User-Agent request-headerフィールドには、リクエストを発信したユーザーエージェントに関する情報が含まれています。 以下は一般的な構文です-
- 例 *
サーバー応答ヘッダー
彼らは与えられている-
受諾範囲
Accept-Ranges response-headerフィールドを使用すると、サーバーはリソースに対する範囲要求の受け入れを示すことができます。 以下は一般的な構文です-
たとえば、バイト範囲のリクエストを受け入れるサーバーは、
リソースの範囲要求の種類を受け入れないサーバーは送信できます-
これは、範囲要求を試行しないようにクライアントにアドバイスします。
Age
Age response-headerフィールドは、発信元サーバーで応答(またはその再検証)が生成されてからの送信者の推定時間を伝えます。 以下は一般的な構文です-
年齢の値は負でない10進整数で、秒単位の時間を表します。 以下は簡単な例です-
キャッシュを含むHTTP/1.1サーバーは、独自のキャッシュから生成されるすべての応答にAgeヘッダーフィールドを含める必要があります。
ETag
_ETag_応答ヘッダーフィールドは、要求されたバリアントのエンティティタグの現在の値を提供します。 以下は一般的な構文です-
以下は簡単な例です-
ロケーション
_Location_応答ヘッダーフィールドは、受信者を完了のためにRequest-URI以外の場所にリダイレクトするために使用されます。 以下は一般的な構文です-
以下は簡単な例です-
Content-Locationヘッダーフィールドは、Content-Locationがリクエストに含まれるエンティティの元の場所を識別するという点でLocationと異なります。
プロキシ認証
Proxy-Authenticate response-headerフィールドは、407(Proxy Authentication Required)応答の一部として含める必要があります。 以下は一般的な構文です-
再試行後
Retry-After response-headerフィールドを503(Service Unavailable)応答と共に使用して、要求元のクライアントがサービスを利用できないと予想される期間を示すことができます。 以下は一般的な構文です-
以下は2つの簡単な例です-
後者の例では、遅延は2分です。
サーバ
Server response-headerフィールドには、要求を処理するためにオリジンサーバーが使用するソフトウェアに関する情報が含まれています。 以下は一般的な構文です-
以下は簡単な例です-
応答がプロキシを介して転送される場合、プロキシアプリケーションはサーバーの応答ヘッダーを変更してはなりません。
セットクッキー
Set-Cookie response-headerフィールドには、このURLで保持する情報の名前と値のペアが含まれています。 以下は一般的な構文です-
Set-Cookie応答ヘッダーは、トークンSet-Cookie:で構成され、その後に1つ以上のCookieのコンマ区切りリストが続きます。 オプションとして指定できる値は次のとおりです-
S.No. | Options and Description |
---|---|
1 |
このオプションを使用して、Cookieに関連付けられたコメントを指定できます。 |
2 |
Domain = domain Domain属性は、Cookieが有効なドメインを指定します。 |
3 |
Expires = Date-time Cookieの有効期限が切れる日付。 これが空白の場合、訪問者がブラウザを終了するとCookieは期限切れになります |
4 |
Path = path Path属性は、このCookieが適用されるURLのサブセットを指定します。 |
5 |
Secure これは、安全な接続下でのみCookieを返すようにユーザーエージェントに指示します。 |
以下は、サーバーによって生成された単純なCookieヘッダーの例です-
Vary
Vary response-headerフィールドは、エンティティに複数のソースがあることを指定しているため、指定されたリクエストヘッダーのリストによって異なる場合があります。 以下は一般的な構文です-
複数のヘッダーをコンマで区切って指定し、アスタリスク「*」の値を指定すると、未指定のパラメーターが要求ヘッダーに限定されないことを示します。 以下は簡単な例です-
ここでは、フィールド名は大文字と小文字を区別しません。
WWW-認証
WWW-Authenticate response-headerフィールドは、401(無許可)応答メッセージに含める必要があります。 フィールド値は、Request-URIに適用可能な認証スキームとパラメーターを示す少なくとも1つのチャレンジで構成されます。 以下は一般的な構文です-
複数のチャレンジが含まれている可能性があるため、WWW-Authenticateフィールド値、または複数のWWW-Authenticateヘッダーフィールドが提供される場合、チャレンジ自体のコンテンツには認証パラメーターのコンマ区切りリストを含めることができます。 以下は簡単な例です-
エンティティヘッダー
許可する
Allow entity-headerフィールドには、Request-URIで識別されるリソースでサポートされるメソッドのセットがリストされます。 以下は一般的な構文です-
複数のメソッドをコンマで区切って指定できます。 以下は簡単な例です-
このフィールドは、クライアントが他の方法を試みることを防ぐことはできません。
コンテンツエンコード
Content-Encoding entity-headerフィールドは、メディアタイプの修飾子として使用されます。 以下は一般的な構文です-
content-codingは、Request-URIによって識別されるエンティティの特性です。 以下は簡単な例です-
要求メッセージ内のエンティティのコンテンツコーディングがオリジンサーバに受け入れられない場合、サーバは415(サポートされていないメディアタイプ)のステータスコードで応答する必要があります。
コンテンツ言語
Content-Language entity-headerフィールドは、囲まれたエンティティの対象オーディエンスの自然言語を示します。 以下は一般的な構文です-
複数の視聴者を対象としたコンテンツには、複数の言語がリストされる場合があります。 以下は簡単な例です-
Content-Languageの主な目的は、ユーザーがユーザー自身の優先言語に従ってエンティティを識別および区別できるようにすることです。
コンテンツ長
Content-Length entity-headerフィールドは、OCTETの10進数で受信者に送信されたエンティティ本体のサイズを示します。HEADメソッドの場合、送信されたエンティティ本体のサイズは要求はGETでした。 以下は一般的な構文です-
以下は簡単な例です-
ゼロ以上の任意のContent-Lengthは有効な値です。
コンテンツの場所
Content-Location entity-headerフィールドは、要求されたリソースのURIとは別の場所からアクセスできる場合、メッセージに含まれるエンティティのリソースの場所を提供するために使用できます。 以下は一般的な構文です-
以下は簡単な例です-
Content-Locationの値は、エンティティのベースURIも定義します。
コンテンツ-MD5
Content-MD5 entity-headerフィールドは、受信時にメッセージの整合性をチェックするために、エンティティのMD5ダイジェストを提供するために使用できます。 以下は一般的な構文です-
以下は簡単な例です-
MD5ダイジェストは、エンティティ本体のコンテンツに基づいて計算されます。これには、適用されたコンテンツコーディングが含まれますが、メッセージ本文に適用される転送エンコードは含まれません。
コンテンツ範囲
Content-Range entity-headerフィールドは、部分的なエンティティ本体とともに送信され、完全なエンティティ本体のどこに部分的な本体を適用するかを指定します。 以下は一般的な構文です-
エンティティに合計1234バイトが含まれると仮定した、byte-content-range-spec値の例-
HTTPメッセージに単一の範囲のコンテンツが含まれる場合、このコンテンツはContent-Rangeヘッダーと、実際に転送されたバイト数を示すContent-Lengthヘッダーと共に送信されます。 例えば、
コンテンツタイプ
Content-Type entity-headerフィールドは、受信者に送信されたエンティティ本体のメディアタイプ、またはHEADメソッドの場合、リクエストがGETであった場合に送信されたメディアタイプを示します。 以下は一般的な構文です-
以下は例です-
有効期限
Expires entity-headerフィールドは、応答が古くなったと見なされる日時を示します。 以下は一般的な構文です-
以下は例です-
最終更新日
Last-Modified entity-headerフィールドは、オリジンサーバがバリアントが最後に変更されたと信じる日時を示します。 以下は一般的な構文です-
以下は例です-