我向我的應用程序添加了一個自定義緩存行爲,類似於Thierry提出的in this article。對於每一個CSS,JS和HTML文件服務器在我的靜態內容我加入這兩個以下標題:我應該手動爲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
這工作得很好,但我注意到,在測試服務器上部署代碼和擊球F5
在Chrome瀏覽器後,我再次獲取整個響應(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