Chrome浏览器不会将if-modified-since标题发送到服务器

我有这些头由服务器发送到客户端:

Cache-Control:private Connection:keep-alive Content-Encoding:gzip Content-Type:text/html Date:Sun, 27 Nov 2011 11:10:38 GMT ETag:"12341234" Set-Cookie:connect.sid=e1u...7o; path=/; expires=Sun, 27 Nov 2011 11:40:38 GMT; httpOnly Transfer-Encoding:chunked last-modified:Sat, 26 Nov 2011 21:42:45 GMT 

我希望客户端validation服务器上的文件没有发生变化,如果是“304”,则发送“200”。

Firefox发送:

 if-modified-since: Sat, 26 Nov 2011 21:42:45 GMT if-none-match: "12341234" 

为什么刷新的页面上的chrome不一样? 我在.Net运行的行为之后:

 context.Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate) 

根据我的经验,您需要的不仅仅是“私有”caching控制标题。 您需要“Max-Age”或“Expires”强制Chrome重新validation服务器的内容。

请记住,只有在这些时间值过后,重新validation才会开始,因此可能需要将其设置为较小的值。

在昨天花了半天的时间之后,我追查了是什么原因导致了我的问题。 只要您点击F12时popupChrome对象检查器/客户端debugging器/networking监视器/事件,Chrome就不会发送caching请求标头。 期。 (更新:在较新版本的Chrome中,有一个checkbox“禁用caching”)。 即使您没有打开“networking”选项卡(例如:打开javascript控制台),该checkbox仍会禁用所有caching。

令人难过的是,因为从客户端debugging这个function,您必须打开networking面板,查看正在发送和接收什么头,以及返回哪些代码。 如果没有打开networking面板,则无法知道您的内容是否从客户端caching。

如果您深入了解您的服务器访问日志,您会注意到在您closuresChrome客户端上的debugging窗口的一瞬间,服务器将返回304(caching内容)。 希望这可以帮助。

Chrome 24.0.1312.57

我在使用HTTPS的时候发现了这个行为的一个答案,以为我会分享我发现的东西。 您不指定是否通过HTTP或HTTPS请求。

“规则其实很简单:证书的任何错误意味着页面不会被caching。”

https://code.google.com/p/chromium/issues/detail?id=110649

如果您正在使用自签名证书,即使您告诉Chrome为其添加例外以便加载页面,也不会caching该页面的资源,并且后续请求也不会有If-Modified-Since标头。

另外( https://stackoverflow.com/a/14899869/362780 ):

F12>设置>常规>禁用caching(当DevTools打开时) – >取消选中此…

我知道这个问题是旧的,但仍然..我注意到铬记得你最后刷新。 所以如果你按ctrl + shift + r(刷新和删除caching),按ctrl + r(只是刷新),chrome会继续删除caching,并且不会在收到的响应中显示304。 这是一个解决方法。 按ctrl + shift + r,然后转到地址栏,将其聚焦,然后按回车键。 如果您的etags设置正确,并且您的服务器已准备好提供304服务,您将在debugging器中看到一个新的响应代码–304。