2

ETags と、php のリクエストを php-cgi デーモンにリダイレクトする nginx (1.2.1) サーバーを使用して、ローカル キャッシュを理解しようとしています。

ここで私の単純な index.php :

<?php
header('Cache-Control: public');
header('Etag:"5954c6-10f4-449d11713aac0"');

echo microtime(true);

2 回目のリクエストの後、ブラウザは If-None-Match ヘッダーを送信します。

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Host:cache.loc
If-None-Match:"5954c6-10f4-449d11713aac0"

しかし、私の Web サーバーは 304 を返しません。

HTTP/1.1 200 OK
Server: nginx/1.2.2
Date: Thu, 12 Jul 2012 11:46:03 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.3.12
Cache-Control: public
Etag: "5954c6-10f4-449d11713aac0"
Cache-Control: public

誤解していない限り、サーバーは Etag を送信された If-None-Match と比較し、同じであるため 304 応答を返す必要があります。

どこが間違っていますか?nginx (または Apache) 自体はジョブを実行しないため、PHP スクリプトで Etag を If-None-Match と比較する必要がありますか?

よろしく、マヌー

4

1 に答える 1

3

PHP を使用してこれを自分で実装する場合は、304 Not Modified も送信する必要があります。

したがって、If-None-Match ヘッダーを ETag と比較し、header() を使用して 304 を送り返します。

于 2012-07-12T11:55:09.690 に答える