首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使IE缓存资源,但始终重新验证

使IE缓存资源,但始终重新验证
EN

Stack Overflow用户
提问于 2011-02-16 14:11:40
回答 2查看 50.3K关注 0票数 43

缓存控制标头"no- cache,must revalidate,private“允许浏览器缓存资源,但强制使用条件请求进行重新验证。这在FF、Safari和Chrome中都能正常工作。

但是,IE7+8不发送条件请求,也就是说,请求报头中缺少“If-Modified- send”,因此服务器使用HTTP/200而不是HTTP/304进行响应。

下面是完整的服务器响应头:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT
Content-type: text/html;charset=utf-8
Content-Length: 10835
Date: Wed, 16 Feb 2011 13:52:26 GMT
Connection: keep-alive
Cache-Control: no-cache, must-revalidate, private

这看起来像是IE的bug,但我还没有在网上找到任何相关的东西,所以我想知道是否另一个头文件的缺失或存在会使IE的行为变得奇怪?

很好地讨论了无缓存和最大年龄之间的区别:What's the difference between Cache-Control: max-age=0 and no-cache?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-22 21:48:58

我终于想通了。这里有一个解释和一个经过测试的解决方案。

下面的站点证实了我的观察结果:http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/

它指出IE不在本地存储带有'no-cache‘指令的页面,因此总是发送一个无条件的请求。

还有一篇MS支持文章- https://support.microsoft.com/help/234067/ -证实了这一点:

Internet Explorer支持HTTP 1.1 Cache-Control标头,该标头可在指定no-cache值时阻止对特定Web资源的所有缓存...

这种行为并不是完全错误的--但它不是RFC 2616 (sec.14.9.1)计划。关于“no- cache”,它说“……缓存在没有成功与源服务器重新验证的情况下,不能使用响应来满足后续请求。”所以响应可以被缓存,但必须重新验证它。除了IE之外,大多数浏览器都会缓存响应并重新验证它。为了防止存储请求,这里有“no-store”Cache-Control指令。

总而言之,IE将“no-cache”视为“no-store”。

下面是以一致的方式为IE和其他浏览器启用条件请求的解决方案:

不要使用no-cache,而是将Expires头设置为过去(或-1,效果相同)。IE和其他主要浏览器都会发送有条件的请求。(请注意,您还应注意IE Vary错误,它会阻止缓存。)

以下是关键的报头字段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT
Expires: -1
Cache-Control: must-revalidate, private

由于validator

  • Expires -1指示资源已过时且必须为revalidated

  • Cache-Control,因此需要
  • Last-Modified (或ETag),不能包含无缓存或无存储的
票数 77
EN

Stack Overflow用户

发布于 2011-08-05 00:05:19

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   $last_modified = filemtime($_SERVER['SCRIPT_FILENAME']);

   session_cache_limiter(FALSE);

   header("Content-Type: text/css");
   header("Cache-Control: max-age=1, must-revalidate, private");
   header("Last-Modified: " . gmdate("D, d M Y H:i:s", $last_modified) . " GMT");

   if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]))
   {
      if(strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]) >= $last_modified)
      {
         header("HTTP/1.1 304 Not Modified");
         exit;
      }
   }
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5017454

复制
相关文章
Spring框架中不同类型的事件
Spring框架是一个功能强大的Java开发框架,它提供了许多便利的功能和组件来简化企业级Java开发。其中,事件驱动是Spring框架的一个重要特性,它允许开发者在应用程序中实现松耦合的组件间通信。本文将介绍Spring框架中不同类型的事件以及如何使用它们。
疯狂的KK
2023/07/24
3220
Spring框架中不同类型的事件
实现点击图片不同区域响应不同的事件
开始考虑以纵轴为0度, 计算点击坐标跟中心点连线并计算跟纵轴的角度来判断, 不过代码写好后发现在不同的设备上有误差
周希
2019/10/15
1.4K0
MySQL中相关数据文件说明
无论何种存储引擎(InnoDB、MyISAM、MEMORY...),只要创建了表结构就会在磁盘上创建一个frm文件,文件名为:表名.frm
俗可耐
2020/06/19
1.5K0
如果正确读取SQL Server中的扩展事件?
微软官方或者一些SQL Server论坛提供了使用SQL XML解析扩展事件的脚本,如代码清单1所示。
全栈程序员站长
2022/07/11
3.3K0
java中==、equals的不同AND在js中==、===的不同
       1.==操作符:首先,对于非基本数据类型的对象比较,相同内存中存储的变量的值是否相等,注意是相同内存地址的才可,并且数值相同(当然地址相同,值也一定相同)才会返回true.     但是,对于基本数据类型的比较(比如:int flot double等),值相同,"=="比较便会返回true.(这是编译的规则,当进行基本数据类型的比较时,会编译生成if_icmpne指令不会进行比较地址。而进行对象比较时,会生成if_icmpne指令,会比较地址。生成的指令都是不同的)。
洋仔聊编程
2019/01/15
4K0
如果正确读取SQL Server中的扩展事件?
    SQL Server中使用扩展事件捕捉所需的信息后,可以选择存放的位置。比如说内存或文件中,但无论存在哪里,其本质都是一个大XML。因此在SQL Server中读取该XML就是解析扩展事件结果的方式。     微软官方或者一些SQL Server论坛提供了使用SQL XML解析扩展事件的脚本,如代码清单1所示。 1: WITH events_cte 2: AS ( SELECT DATEADD(mi, 3:
用户1217611
2018/01/30
1.4K0
不同物种的的10x单细胞转录组参考数据文件构建
10x单细胞转录组数据分析所需要的参考数据文件主要是基因组的fasta文件和基因注释gtf文件,其官网有详细的例子:https://support.10xgenomics.com/single-cell-gene-expression/software/pipelines/latest/using/tutorial_mr
生信技能树
2022/03/03
1.2K0
不同物种的的10x单细胞转录组参考数据文件构建
[打造自己的监控系统之执行Oracle命令]获取Oracle数据文件创建的时间
上节讲到如何建立一个Oracle命令的界面,这节讲述如何利用Django获取Oracle数据文件的建立时间并显示出来
bsbforever
2020/08/19
1.1K0
Spring框架中有哪些不同类型的事件
如果一个bean实现了ApplicationListener接口,当一个ApplicationEvent 被发布以后,bean会自动被通知。 
红目香薰
2022/11/29
3500
MFC树点击事件中CTreeCtrl::HitTest用法以及uFlag参数的不同值的含义
CTreeCtrl::HitTest的语法结构: ​​​​​​​ HTREEITEM HitTest( CPoint pt, UINT* pFlags = NULL ) const; HTREEITEM HitTest( TVHITTESTINFO* pHitTestInfo ) const;  参数的取值及含义: Value 含义 TVHT_ABOVE 在客户端区域。 TVHT_BELOW 在工作区中。 TVHT_NOWHERE 在工作区,但是,在最后一项下。 TVHT
acoolgiser
2019/01/17
2K0
selec/poll中的读写事件和epoll中的读写事件
在Linux网络编程中,常常使用select和poll来做事件触发,监听socket的读写状态,然后进行读写操作。现在新的linux内核中,增加了epoll事件触发机制,具有更高的性能和更好的设计理念,可以用它来完全代替select和poll。相比于select,epoll最大的好处在于它不会随监听fd数目的增长而降低效率。因为在内核总的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件中有这样的声明: [cpp] view pl
李海彬
2018/03/22
3.2K0
ol中不同区域加载不同底图
牛老师讲GIS
2023/06/10
3300
ol中不同区域加载不同底图
Spring中的事件
文章目录 1. 简介 2. 事件 2.1. Spring中内置的事件 2.2. 自定义事件 3. 监听器 3.1. 实现ApplicationListener接口 3.2. 使用@EventListener注解 4. 事件发布 4.1. Spring的事件发布类 4.2. 直接注入 4.3. 使用ApplicationEventPublisherAware注入 5. 事件多播器 6. 异步事件 6.1. 使用@Async实现异步 6.2. 自定义事件多播器 7. 源码解析 简介 学过编程语言的肯定知道事
爱撒谎的男孩
2019/12/31
1.3K0
isa 指针中不同的位代表不同的含义
对象.isa -> 类.super -> 父类.super -> 根类.super -> nil
艳艳代码杂货店
2021/09/26
9480
linux环境中,两个不同网段的机器互通
host2 双网卡 eth0 172.24.100.14/16   eth1 192.168.122.214/24
用户1685462
2021/07/27
2.9K0
video标签在不同平台上的事件表现差异分析
本文作者:IMWeb 张颖 原文出处:IMWeb社区 未经同意,禁止转载 video标签属性和事件介绍 为了文章的完整性,首先还是列举一下video标签的属性: src :视频的属性 pos
IMWeb前端团队
2018/01/08
2.5K0
video标签在不同平台上的事件表现差异分析
然后列出可以用于视频状态监控的Media 事件(由媒介(比如视频、图像和音频)触发的事件,适用于所有html元素,但常用于 audio、embed、img、object 以及 video中):
IMWeb前端团队
2019/12/04
1.2K0
Sentry 监控 - Environments 区分不同部署环境的事件数据
Environment 是 Sentry 支持的 tag,您可以(并且应该)添加到您的 SDK 中。通常,tag 接受任何值,但它旨在指代代码部署的命名约定,例如开发(development)、测试(testing)、预发布(staging)或生产(production)。
为少
2021/10/12
2.1K0
jQuery中不同元素的作用
removeClass() - 从被选元素删除一个或多个类 toggleClass() - 对被选元素进行添加/删除类的切换操作 css() - 设置或返回样式属性
用户7718188
2021/10/07
1.7K0
点击加载更多

相似问题

允许我为字体系列设置默认字体的应用程序。

10

Windows字体编辑器

30

一个好的源代码编辑器

40

一个文本编辑器,它允许您对文本执行Python代码段。

20

允许我将NTP设置为“关于:空白”的Chrome扩展

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文