最も優れた http://redbot.org テストツールを使用して、サイトのHTTPヘッダーが正しいことを確認しました(動的コンテンツを提供するPHPのカスタムコード-したい可能な場合はキャッシュされるようにします-Apache2によって提供されます)
テストの1つは言う:
The If-Modified-Since response is missing required headers
HTTP requires 304 Not Modified responses to have certain headers, if they are also present in a normal (e.g., 200 OK response).
This response is missing the following headers: last-modified.
This can affect cache operation; because the headers are missing, caches might remove them from their cached copies.
...したがって、resonseにはLast-Modifiedヘッダーが含まれません。ただし、コードは送信しようとします。さらに調査すると、ApacheはHTTPヘッダーのホワイトリストを使用しているようで、304の応答を許可します...
if (r->status == HTTP_NOT_MODIFIED) {
apr_table_do((int (*)(void *, const char *, const char *)) form_header_field,
(void *) &h, r->headers_out,
"Connection",
"Keep-Alive",
"ETag",
"Content-Location",
"Expires",
"Cache-Control",
"Vary",
"Warning",
"WWW-Authenticate",
"Proxy-Authenticate",
"Set-Cookie",
"Set-Cookie2",
NULL);
}
else {
send_all_header_fields(&h, r);
}
これは、Apache HTTPD 2.2.22ソースコードのmodules/http/http_filters.cの1281行目付近にあります。
....「Last-Modified」はそのリストにありません。
では、問題は-間違っている、redbot、またはApacheですか?
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html は、Last-Modifiedを含めるかどうかを指定していないようです。 (Etagは-であるべきだと言っており、Apacheリストで許可されています)
便利なケースに入れて、これがテストケースです: http://redbot.org/?uri=http%3A%2F%2Fwww.geograph.org.uk%2Fhelp%2Fsitemap -私のコードはLast-Modifiedヘッダーをインクルードします。そのredbotはそれを取得しません(カスタムX- ..ヘッダーも)。
正解です。 REDは、HTTPbis http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-18#section-4.1 の要件を実装しました。
通常、HTTPbisの要件はRFC2616と下位互換性があります(つまり、現在は2616の非準拠に準拠した実装は行われていません)が、この変更はすり抜けました。それを修正するために問題を公開します。それまでは、REDの要件を変更します。
いいえ、RFC 2616から引用したように、Last-Modified
は不要です。この問題を発見しました https://github.com/mnot/redbot/issues/61 必要なヘッダーのチェック。しかし、彼らはこの問題で「日付」だけが必要であると述べましたが、実装は異なっていました(間違っていると思います)。