HTTP 缓存 - 检查服务器,始终发送 If-Modified-Since

标签 http caching

我有一个由用户生成的资源,因此会在不可预测的时间发生变化(例如,用户上传 Word 文档的新版本)。我希望浏览器缓存此资源,并在每次请求时使用服务器验证其缓存(即始终发送 If-Modified-Since header )。

通过测试,我发现当我在响应 header 中使用“Cache-Control: no-cache”时,Firefox 会正确处理此问题。但是,Internet Explorer 7 不会在其请求 header 中发送“If-Modified-Since”。

“Cache-Control: no-cache”是否达到了我在开头描述的效果?如果没有,我可以做些什么不同的事情来实现我在浏览器中所描述的目标?

谢谢。

最佳答案

根据 Microsoft ( http://support.microsoft.com/kb/234067 ) 的说法,您需要将 Expires header 设置为 -1,才能在 Internet Explorer 中正常工作。

来自页面:

In many cases, Web servers have one or more volatile pages on a server that contain information, which is subject to change immediately. These pages should be so marked by the server with a value of "-1" for the Expires header. On future requests by the user, Internet Explorer usually contacts the Web server for updates to that page via a conditional If-Modified-Since request.

我认为重点是,如果 IE 有过期日期,它就没有理由询问您资源是否已被修改,因为它的缓存副本应该“足够好”。

该页面还指出 IE 支持 Cache-control: no-cache,但不建议这样做。所以听起来它应该可以工作,但无论如何尝试一下 Expires 吧。

此外,其他谷歌搜索告诉我,浏览器通常会发送 If-Modified-Since,所以也许这就是 Firefox 工作的原因。尝试删除 Cache-Control: no-cache 以查看 Firefox 是否仍能正常运行。

关于HTTP 缓存 - 检查服务器,始终发送 If-Modified-Since,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917586/

相关文章:

Angular 4动态填充查询参数

javascript - 如何在不使用 HTML <form> 的情况下上传文件?

javascript - 使用 Javascript 发送查询字符串

java - 我可以/应该将 ConcurrentMap 与我自己的缓存一起使用吗?

sql-server - DateTime.Now 如何影响 SQL Server 中的查询计划缓存?

php - Laravel 多对多查询 Controller

java - 缓存认证数据

java - 如何将 map 存储在 Guava 缓存中

caching - 2 个 Redis 实例 : as a cache and as a persistent datastore

java - nameValuePair 数组列表的数值等效项?