2011-05-24 66 views
1

我作出了一個以圖像請求和響應頭,我回來是:HTTP頭 - 緩存問題

Accept-Ranges:bytes 
Content-Length:4499 
Content-Type:image/png 
Date:Tue, 24 May 2011 20:09:39 GMT 
ETag:"0cfe867f5b8cb1:0" 
Last-Modified:Thu, 20 Jan 2011 22:57:26 GMT 
Server:Microsoft-IIS/7.5 
X-Powered-By:ASP.NET 

請注意沒有Cache-Control頭的。

在Chrome的後續請求中,Chrome瀏覽器知道要進入緩存以檢索圖像。它如何知道使用緩存?我的印象是,我不得不用Cache-Control標題告訴它。

回答

3

您有一個ETag和一個Last-Modified標題。它可能使用這些。但是爲了實現這一點,它仍然需要分別使用If-None-MatchIf-Modified-Since來提出請求。

+0

我看不到'的If-Modified-Since'在請求調用。其他瀏覽器是否使用ETag和Last-Modified?瀏覽器實施起來了嗎?我應該發送'Cache-Control'頭文件嗎?謝謝。 – skaz 2011-05-24 20:16:52

+0

'ETag'和'Last-Modified'都希望瀏覽器發出另一個請求,然後用200或304進行響應。瀏覽器不應該僅僅保留它們。 Chrome在這裏有點不同,因爲我注意到它保留了文件,即使它沒有被指示。發送'Cache-Control'並指定到期日期總是一個好主意。 – rid 2011-05-24 20:19:29

1

設置緩存控制你必須自己指定它。您可以在web.config,IIS管理器中選擇文件夾(靜態,圖像...)或將其設置爲代碼。 HTTP 1.1標準建議將來一年作爲最長過期時間。

設置將來一年的到期日期被認爲是您網站中所有靜態內容的良好做法。如果沒有頭文件,會導致If-Modified-Since請求,這會導致第一次請求小型靜態文件需要更長的時間。在這些調用中使用了ETag頭。

如果您有Cache-Control: max-age=315360000基本HTTP響應將超過If-Modified-Since>調用,並且因爲這樣可以很好地刪除ETag頭並導致較小的靜態文件響應頭。 IIS沒有設置,如此你要做的response.Headers.Remove("ETag");OnPreServerRequestHeaders()

,如果你想進一步優化你的標題可以刪除IIS設置X-Powered-By:ASP.NETX-Aspnet-Version頭(altough我不從你的反應看)在web.config中 - enableVersionHeader="false"在system.web/httpRuntime元素中。

更多的技巧,我建議偉大的書 - http://www.amazon.com/Ultra-Fast-ASP-NET-Build-Ultra-Scalable-Server/dp/1430223839