私はティエリーが提案したものと同様に、アプリケーションにカスタムキャッシングビヘイビアを追加しましたin this article。私の静的コンテンツ内のすべてのCSS、JSとHTMLファイルサーバのために私は2以下のヘッダを追加しています:Restletでキャッシュされたリクエスト(ETag)の304応答を手動で返す必要がありますか?
// Added by me
ETag: "0c635aa7113262fac7606da2432e00f5" // md5(last_mod_date_of_file)
Cache-Control: max-age=31536000 // one year
// Automatically added by Restlet (probably Directory class?)
Date: Wed, 09 Nov 2016 11:50:53 GMT
Expires: Wed, 09 Nov 2016 12:00:53 GMT
Last-Modified: Wed, 09 Nov 2016 17:30:56 GMT
これは正常に動作します、しかし私は、テストサーバー上でコードを展開し、ChromeでF5
を打った後ということに気づきました私は応答の全体をもう一度(HTTP 200を返して)取り出します。
私は、これらの要求があまりにも適切なヘッダを使用していることに気付きました:
Cache-Control:max-age=0
If-Modified-Since: Wed, 09 Nov 2016 17:30:56 GMT
If-None-Match: "0c635aa7113262fac7606da2432e00f5"
私の質問があり、私は私のサーバーフィルタでIf-None-Match
ヘッダの手動検証を行い、その後、 304応答を返す必要があります?それともRestletによって処理されていますか?
注:この問題で少し奇妙なのは、私のローカル開発環境で適切に動作するように思えたということです。また、Expires
がRestletによって日付に設定されてからLast-Modified
に設定される理由について少し混乱しています。これが悪のルートであればデバッグしようとしますが、304ステータスの手動設定とサーバー上のETagsのチェックについては私の質問を無効にしません。
一般的なシナリオは、ブラウザとJavaアプリケーションの間にキャッシュリバースプロキシを置くことです。この場合、304はそれによって処理され、アプリケーション内で気にする必要はありません。エッジサーバーがヘッダーをブラウザやHTTP標準と同じではないと解釈する可能性があるため、注意してください。例えば。 NGINXは非常に(ミス)設定可能です。 – cruftex
上記のヘッダーから、Last-Expiresは現在の時刻から10分後です。実際には最後に修正された時間の継ぎ目が間違っています。ビルドとプロダクションの時間やゾーンが異なるかもしれませんか? – cruftex