我正在開發一個使用GWT的web應用程序,並且在瀏覽器中看到一個與app.nocache.js
文件緩存的瘋狂問題,即使Web服務器發送了該文件的新副本!如何使瀏覽器停止緩存GWT nocache.js
我正在使用Eclipse編譯應用程序,該應用程序在開發模式下工作。爲了測試生產模式,我有一臺虛擬機(Oracle VirtualBox),在我的主機上運行Ubuntu guest OS(Windows 7)。我在VM中運行lighttpd web服務器。 VM正在共享我的項目的戰爭目錄,並且Web服務器正在爲此目錄服務。
我使用Chrome作爲瀏覽器,但同樣的事情發生在Firefox中。
這裏的情景:
- 該網頁的應用程序是空白。對Chrome的「檢測元素」工具表示贊同,這是因爲它試圖獲取
6E89D5C912DD8F3F806083C8AA626B83.cache.html
,這不存在(404 not found
)。 - 我檢查戰爭目錄,果然,該文件不存在。
- 瀏覽器上的
app.nocache.js
WAS RELOADED來自Web服務器(200 OK),因爲服務器上的文件比瀏覽器緩存更新。我確認了服務器返回的新文件的文件大小和時間戳是正確的。 (這是關於服務器的HTTP響應的Chrome報告) 但是,如果我在瀏覽器上打開
app.nocache.js
,則javascript指的是6E89D5C912DD8F3F806083C8AA626B83.cache.html
!也就是說,即使網絡服務器發送了一個新的app.nocache.js
,瀏覽器似乎已經忽略了這一點,並繼續使用它的緩存副本!轉到Google-> GWT在Eclipse中編譯。重新編譯整個事情。
- 在戰爭目錄中驗證
app.nocache.js
已被覆蓋並具有新的時間戳。 - 從Chrome重新加載頁面,並再次驗證服務器向
app.nocache.js
發送了200 OK響應。 - 瀏覽器再次嘗試加載
6E89D5C912DD8F3F806083C8AA626B83.cache.html
並失敗。瀏覽器仍在使用舊版緩存副本app.nocache.js
。 - 製造絕對肯定的戰爭目錄中,沒有什麼是指
6E89D5C912DD8F3F806083C8AA626B83.cache.html
(通過查找和grep)
到底哪裏出問題了?爲什麼瀏覽器緩存這個nocache.js
文件,即使服務器正在發送一個新的副本?
這是在瀏覽器中單擊重新加載時HTTP請求/響應標頭的副本。在此跟蹤,服務器的內容還沒有被最後得到重新編譯(但要注意nocache.js的緩存版本仍然是錯的!):
Request URL:http://192.168.2.4/xbts_ui/xbts_ui.nocache.js
Request Method:GET
Status Code:304 Not Modified
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:192.168.2.4
If-Modified-Since:Thu, 25 Oct 2012 17:55:26 GMT
If-None-Match:"2881105249"
Referer:http://192.168.2.4/XBTS_ui.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
Response Headersview source
Accept-Ranges:bytes
Content-Type:text/javascript
Date:Thu, 25 Oct 2012 20:27:55 GMT
ETag:"2881105249"
Last-Modified:Thu, 25 Oct 2012 17:55:26 GMT
Server:lighttpd/1.4.31
順便說一句,這看起來類似於http://stackoverflow.com/questions/3407649/stop-browser-scripts-caching-in-gwt-app,但它沒有包含任何幫助我解決這個問題的信息。 – jfritz42
您是否閱讀過https://developers.google.com/web-toolkit/doc/latest/DevGuideCompilingAndDebugging#perfect_caching? –
是的,似乎正確的事情正在發生,因爲該頁面顯示「If-Modified-Since fetch足夠」。我可以從Chrome Inspect Element工具中得知,瀏覽器在GET請求中發送了「If-Modified-Since:Thu,2012年10月25日17時03分53秒」,服務器以「Last-Modified:Thu,25 2012年10月17:55:26 GMT「 – jfritz42