リクエストオブジェクトのIf-Modified-Since
ヘッダーを使用しようとしているキャッシングライブラリを探しています。問題は、このヘッダーが設定されないことです。常に空白であるため、REQUESTであることがわかります。
リクエストにIf-Modified-Since
ヘッダーを強制するにはどうすればよいですか?それとも私はこれが何をするのかわからないのですか?.
これが私が参照している関数です。
public function isNotModified(Request $request)
{
$lastModified = $request->headers->get('If-Modified-Since');
$notModified = false;
if ($etags = $request->getEtags()) {
$notModified = (in_array($this->getEtag(), $etags) || in_array('*', $etags)) && (!$lastModified || $this->headers->get('Last-Modified') == $lastModified);
} elseif ($lastModified) {
$notModified = $lastModified == $this->headers->get('Last-Modified');
}
if ($notModified) {
$this->setNotModified();
}
return $notModified;
}
If-Modified-Since
を含む要求は、 Last-Modified
ヘッダーを組み合わせた応答とともに取得されたリソースがクライアントにすでにある場合にのみ意味があります。 Cache-Control
および/または Pragma
public
を含む値のようなブラウザキャッシュを可能にするヘッダー付き。
また、元の応答に ETag
ヘッダーも含まれている場合、一部のブラウザーにはIf-Modified-Since
が含まれていないことに気付きました。ブラウザは代わりに If-None-Match
を使用してテストします。
まず、最初の応答が最初にキャッシュされていることを確認する必要があります(I answered これは別の関連する質問です。
次のフィールドを設定してみてください。
Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT
Expires: -1
Cache-Control: must-revalidate, private
Last-Modified
が必要です(If-Modified-Since
をテストする場合は、ETag
を送信しないでください)Expires -1
は、リソースが古く、常に再検証する必要があることを示していますCache-Control
にはキャッシュもストアも含めないでください最初のHTTP/200
応答でこれらのヘッダーを送信すると、後続のリクエストで、ブラウザはIf-Modified-Since
ヘッダーを含む条件付きリクエストを送信する必要があります。