2015-09-07 91 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

希望这有助于! 亨利

相关问题