2015-09-07 90 views
24

將項目移至生產服務器後,我發現靜態文件(如圖像)不會以狀態「304未修改」的形式返回,儘管有像「Last-Modified 「和」過期「。304在靜態文件上未修改

請求頭

Accept:image/webp,image/*,*/*;q=0.8 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,uk;q=0.2 
Cache-Control:max-age=0 
Connection:keep-alive 
Cookie:_LANG=ru 
DNT:1 
Host:test.com 
If-Modified-Since:Mon, 07 Sep 2015 08:46:37 GMT 
If-None-Match:"1D0E949B4DCD480" 
Referer:http://test.com/ru/Some/Index/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,  like Gecko) Chrome/45.0.2454.85 Safari/537.36 

響應頭

HTTP/1.1 200 OK 
Cache-Control: public 
Content-Type: image/png 
Expires: Tue, 08 Sep 2015 14:33:06 GMT 
Last-Modified: Mon, 07 Sep 2015 08:46:37 GMT 
Accept-Ranges: bytes 
ETag: "1D0E949B4DCD480" 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 07 Sep 2015 14:33:06 GMT 
Content-Length: 5953 

在當地的 「IIS表示」 一切正常。

本地響應頭

HTTP/1.1 304 Not Modified 
Cache-Control:public 
Date:Mon, 07 Sep 2015 14:38:12 GMT 
Etag:"1D04A9052E17E00" 

及時,可能是什麼原因?

Web.config文件是相同的。

謝謝!

UPD 1:

chrome network console chrome request

UPD 2:

本地機器高速緩存快照返回圖像

C:\Users\dev>netsh http show cachestate 

Snapshot cache responses HTTP:: 
-------------------------------- 

URL-address: http://dev2-pc:1437/Views/CustomMeme/byby/img/header.jpg 
Status Code: 200 
Команда HTTP: GET 
Тип политики кэша: Срок жизни (TTL) 
Срок жизни записи в кэше (сек): 86399 
Время создания: 2015.9.8:12.14.41:0 
Имя очереди запросов: Clr4IntegratedAppPool{737BCE3B-FD81-4AB4-B976-A3A8C8A-94D8} 
Тип содержимого: image/jpeg 
Кодировка содержимого: (null) 
Длина заголовков: 415 
Длина содержимого: 49017 
Число обращений: 3 
Принудительное отключение после обслуживания: FALSE 

但是遠程(生產)SER版本緩存快照是空

C:\Users\Администратор>netsh http show cachestate 

Snapshot cache HTTP responses: 
-------------------------------- 
The cache contains entries that match the specified URL-address 
+2

好奇你的請求頭包括'Pragma:no-cache'。當開發人員工具打開時,您的瀏覽器是否設置爲禁用緩存? –

+0

@ChrisCurtis,謝謝你的回答,'Pragma:no-cache'不會影響響應。我更新問題文本並添加一些屏幕截圖。 –

+0

web.config是否一樣?生產服務器上是否禁用了靜態緩存?這裏涉及很多變量,理想情況下,靜態內容過期必須在IIS級別打開或在web.config –

回答

-1

從我個人理解,狀態代碼304表示服務器告訴瀏覽器,「哎,你所請求的圖像沒有被改變,因爲XXXX/XX/XX,使用本地緩存應該沒問題!「。因此,開發機器和生產服務器之間的差異很可能是由生產服務器IIS設置引起的。

什麼你可以嘗試,現在是:

  • 做「硬性重新加載」到你的網頁,在網頁瀏覽器(Chrome瀏覽器,您可以通過點擊F12打開「開發工具」,然後右鍵點擊「重新加載」按鈕,它會給你「空緩存和硬重新加載」選項「
  • 在你的開發機器上,嘗試安裝IIS而不是IIS express,然後在IIS中運行你的web應用程序。 IIS Express與生產服務器IIS之間的默認設置差異,因此請嘗試在開發計算機上模擬生產服務器環境
  • 嘗試顯式禁用IIS緩存。你可以在這裏找到如何做到這一點https://serverfault.com/questions/117970/iis-7-returns-304-instead-of-200

希望這有助於! 亨利

相關問題