サーバーからクライアントに送信するのに必要なHTTP応答ヘッダーは何ですか?
HTTP応答のオーバーヘッドを最小化するために、HTTP応答ヘッダーを最適化する作業をしています。 「オーバーヘッド」はいくぶん誇張されていることは知っていますが、きれいな出力が好きです。
冗長キャッシュヘッダーを送信する多くのWebサイトが表示されます。
例えば.
Expires
とCache-Control: max-age
の両方を指定したり、Last-Modified
とETag
の両方を指定したりすることは冗長です。
必要であると定義するものに依存します。状況に関係なく、すべての応答で送信する必要のあるヘッダーフィールドはありませんが、実際にはshould送信するヘッダーフィールドがあります。近くに来る唯一のヘッダーフィールドはDate
ですが、それでも必要ない状況があります。
RFC 2119 の用語では、用語[〜#〜] must [〜#〜]は、何かが仕様の要件であり、要件を満たさないことは無効であることを意味します。 RFCで定義されたヘッダーフィールドはありません 7230 、 7231 、 7232 、 7233 、 7234 、または 7235 that[〜#〜] [〜#〜]はOriginサーバーによって送信される必要がありますすべての場合。
たとえば、次のヘッダーは省略できます(おそらく送信する必要があります)。
Originサーバーは、協定世界時の現在のインスタンスの合理的な近似値を提供できるクロックを持たない場合、
Date
ヘッダーフィールドを送信してはいけません。応答がステータスコードの1xx(情報)または5xx(サーバーエラー)クラスの場合、OriginサーバーはDate
ヘッダーフィールドを送信できます。 Originサーバーは、他のすべての場合にDate
ヘッダーフィールドを送信しなければなりません。
引用の最後の文に注意してください。 Date
ヘッダーフィールド[〜#〜] [〜#〜]は、Originサーバーが「 UTCでの日付の合理的な近似」ですが、サーバーがそれ自体を不正確に表示するのを止めるものは何もありません。
Originサーバーは、その応答で
Server
フィールドを生成する場合があります。
[有限数の事前定義済みのケース]を除き、
Transfer-Encoding
がない場合、Originサーバーは、ヘッダーセクション全体を送信する前にペイロードのボディサイズがわかっている場合、Content-Length
ヘッダーフィールドを送信する必要があります。
Content-Length
とTransfer-Encoding
については、どちらも送信できないことに注意してください。この場合、応答の長さは「サーバーが接続を閉じる前に受信したオクテットの数によって決まります」。
Content-Type
ヘッダーフィールドが存在しない場合、受信者はapplication/octet-stream
(RFC2046、セクション4.5.1)のメディアタイプを想定するか、データを調べてそのタイプを判断できます。
特定のヘッダーが必要になる状況があります。たとえば、次のとおりです。
応答の詳細に依存しますが、一般的に、Originサーバーからの応答には以下が必要です。
content-Length、Transfer-Encoding、またはConnection:closeのいずれか。
キャッシングを行う場合は、Cache-Controlを追加します(例:max-age);通常、有効期限はもう必要ありません。クライアントが検証できるようにする場合は、Last-ModifiedまたはETagを追加します。