Ask*_*ken 40 http cache-control http-headers node.js
我将这些标头由服务器发送到客户端:
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
Run Code Online (Sandbox Code Playgroud)
我希望客户端验证文件在服务器上没有更改,如果否则为"304",则发送"200".
Firefox发送:
if-modified-since: Sat, 26 Nov 2011 21:42:45 GMT
if-none-match: "12341234"
Run Code Online (Sandbox Code Playgroud)
为什么Chrome不会在刷新页面时发送相同内容?我正在追踪.Net运行的行为:
context.Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate)
Run Code Online (Sandbox Code Playgroud)
小智 58
在昨天花了半天时间后,我找到了导致这个问题的原因.只要您点击F12时弹出Chrome对象检查器/客户端调试器/网络监视器/ Thing,Chrome就不会发送缓存请求标头.期.(更新:在较新版本的Chrome中,有一个复选框"禁用缓存").即使您没有打开"网络"选项卡(例如:打开javascript控制台),此复选框仍会禁用所有缓存.
很遗憾,因为从客户端进行调试会使您无需打开网络面板以查看正在发送和接收的标头以及正在返回的代码.如果没有打开网络面板,则无法知道您的内容是否正在从客户端缓存.
如果您深入了解服务器访问日志,您会注意到您的服务器在您关闭Chrome客户端上的调试窗口时返回304s(缓存内容).希望这可以帮助.
Chrome 24.0.1312.57
Nee*_*eek 31
我在使用HTTPS时找到了这种行为的答案,我想我会分享我发现的内容.您没有指定是通过HTTP还是HTTPS请求.
"规则实际上非常简单:证书的任何错误都意味着页面不会被缓存."
https://code.google.com/p/chromium/issues/detail?id=110649
如果您使用自签名证书,即使您告诉Chrome为其添加例外以便加载页面,也不会缓存该页面中的资源,并且后续请求将不具有If-Modified-Since标头.
And*_*age 12
根据我的经验,您需要的不仅仅是"私有"Cache-Control标头.您需要"Max-Age"或"Expires"才能强制Chrome重新验证服务器的内容.
请记住,重新验证只会在经过这些时间值后开始,因此可能需要将它们设置为较小的值.