asp.net-mvc - 为什么 Firefox 会往返服务器以确定我的文件是否被修改?

标签 asp.net-mvc firefox http-headers

我的网站上有一些静态内容,我已经为其设置了缓存(使用 Asp.NET MVC)。根据 Firebug,我第一次打开页面时,Firefox 发送了这个请求:

GET /CoreContent/Core.css?asm=0.7.3614.34951
Host: 127.0.0.1:3916
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/css,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:3916/Edit/1/101
Cookie: .ASPXAUTH=52312E5A802C1A079E2BA29AA2BFBC5A38058977B84452D62ED52855D4164659B4307661EC73A307BFFB2ED3871C67CB3A9AAFDB3A75A99AC0A21C63A6AADE9A11A7138C672E75125D9FF3EFFBD9BF62
Pragma: no-cache
Cache-Control: no-cache

我的服务器用这个回复:
Server: ASP.NET Development Server/9.0.0.0
Date: Mon, 23 Nov 2009 18:44:41 GMT
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 1.0
Cache-Control: public, max-age=31535671
Expires: Tue, 23 Nov 2010 18:39:12 GMT
Last-Modified: Mon, 23 Nov 2009 18:39:12 GMT
Vary: *
Content-Type: text/css
Content-Length: 15006
Connection: Close

到现在为止还挺好。但是,如果我刷新 Firefox(不是缓存清除刷新,只是正常刷新),在该刷新周期中,Firefox 将再次带着此请求转到服务器:
GET /CoreContent/Core.css?asm=0.7.3614.34951
Host: 127.0.0.1:3916
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/css,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:3916/Edit/1/101
Cookie: .ASPXAUTH=52312E5A802C1A079E2BA29AA2BFBC5A38058977B84452D62ED52855D4164659B4307661EC73A307BFFB2ED3871C67CB3A9AAFDB3A75A99AC0A21C63A6AADE9A11A7138C672E75125D9FF3EFFBD9BF62
If-Modified-Since: Mon, 23 Nov 2009 18:39:20 GMT
Cache-Control: max-age=0

我的服务器响应 304 Not Modified .

为什么 Firefox 会发出第二个请求?在第一个回复中,我说缓存不会过期一年(我打算在情况发生变化时使用查询参数)。我是否必须添加另一个响应 header 以防止这种额外的往返?

编辑 :我是否按刷新,或者是否再次访问该页面(或引用相同外部文件的不同 URL)都没有关系。 Firefox 再次执行相同的操作。另外,我不声称这是 FF 中的错误,我只是想知道是否还有另一个标题我可以设置,这意味着“此文档永远不会更改,请不要再打扰我”。

最佳答案

这种行为似乎是所有现代浏览器的“设计使然”。在 IE 中,您可以调查相同的情况。按 F5 总是会导致浏览器检查内容是否被修改。在缓存清除请求期间,浏览器不传递 Last-Modified header ,服务器必须返回 HTTP 200(不是 HTTP 304),因此 304 在您的情况下还不错。

关于asp.net-mvc - 为什么 Firefox 会往返服务器以确定我的文件是否被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1785188/

相关文章:

Javascript - onerror 事件在 firefox 中不起作用

java - 如何(简单地)从java生成POST http请求来上传文件

c# - 显示字符串列表

asp.net-mvc - 尝试将 AutoMapper 添加到 Asp.net Core 2?

javascript - 火狐内存管理

java - 当我在 Firefox 上运行测试时,Selenium WebDriver 出现 UnreachableBrowserException

php - 将 noindex header 添加到 php 重定向文件

azure - 如何将 Web 代理地址传递给 Microsoft.WindowsAzure.Storage.OperationContext.UserHeaders?

html - 无法向上移动超大屏幕中的 ASP.NET Mvc 按钮

c# - 用于创建新对象的 ASP.net MVC DropDownList 值