问题标签 [cache-control]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
http - 无法让浏览器缓存内容
抱歉,这似乎与许多其他问题非常相似,但我查看了我能看到的所有相关帖子,但它们似乎与我没有完全相同的问题 ;-)
问题是我无法让 .js、.css 和图像的客户端缓存从我的 Apache2 服务器(我有 Ubuntu Apache/2.2.8 和 Windows 下的 WAMP Apache)工作。
使用默认设置,我可以获得良好的 ETag 风格的服务器主导的缓存(304 响应),但是如果我通过将 Header Unset 命令放入我的虚拟主机配置文件中来关闭它,然后补充缓存指令(见下文),它不会似乎受到浏览器的尊重。
我可以看到使用 Firebug 浏览器知道缓存文件在另外几个小时内有效,但它仍然要求它。
任何有关如何调试的提示都将受到欢迎。
主机配置的相关部分如下所示:
xmlhttprequest - 如何使 Microsoft XmlHttpRequest 尊重缓存控制指令
我正在使用 MSXML 的XmlHttpRequest对象发出请求:
成功了send
,我得到了我的 xml 数据。
除了XmlHttpRequest
没有实际访问网络(我可以看到没有发出实际的 http 请求)。Process Monitor 显示该文件实际上是从我的缓存中提供的:
所以我想告诉XmlHttpRequest
用户代理任何超过 0 秒的缓存内容都太旧了。执行此操作的标准方法是添加请求标头:
发送请求:
成功了send
,我得到了我的 xml 数据。
除了XmlHttpRequest
没有实际访问网络(我可以看到没有发出实际的 http 请求)。Process Monitor 显示该文件实际上是从我的缓存中提供的。
那么有什么问题呢?是max-age
不是在做我认为的事情?
来自RFC 2616 - 超文本传输协议,第 14 部分:标头字段定义:
其他指令允许用户代理修改基本过期机制。这些指令可以在请求中指定:
max-age
表示客户端愿意接受年龄不大于指定时间(以秒为单位)的响应。除非 maxstale 指令也包括在内,否则客户端不愿意接受过时的响应。
这正是我想要的。
不Cache-Control: max-age=0
正是我想要的,还是 MSXML 的XmlHttpRequest
对象有问题?
更新一
这是 MSXML XmlHttpRequest
COM 对象:
- CLSID:{88d96a0a-f192-11d4-a65f-0040963251e5}
- 程序 ID:Msxml2.XMLHTTP.6.0
更新二
该max-age
指令由客户端添加,以使所有缓存都遵守。来自 RFC:
Cache-Control 通用标头字段用于指定 请求/响应链上的所有缓存机制必须遵守的指令。这些指令指定旨在防止缓存对请求或响应产生不利影响的行为。这些指令通常会覆盖默认缓存算法。缓存指令是单向的,因为在请求中存在指令并不意味着要在响应中给出相同的指令。
Max-age 不适用于服务器;对服务器来说毫无意义。它适用于用户和服务器之间的所有缓存系统。
更新三
如果用户代理实现了一个 HTTP 缓存,它应该尊重
Cache-Control
由设置的请求头setRequestHeader()
(例如,Cache-Control: no-cache
绕过缓存)。除非最终用户明确请求此类行为(例如通过重新加载页面),否则它不得自动发送Cache-Control
或请求标头。Pragma
按照他们的示例,我尝试使用该no-cache
指令:
并且XmlHttpRequest
客户端仍然完全从缓存中服务请求,根本不查询服务器。
W3C 说,如果有缓存,它必须尊重Cache-Control
如果它是通过设置的setRequestHeader
。Microsoft 的 XmlHttpRequest 似乎没有满足这一要求。
c# - ASP.NET 禁用页面级缓存问题/危险?
基本上,我禁用缓存的原因是因为我有 DevExpress ASPxGridViews,它非常适合过滤、排序等,但客户端正在处理大量数据,并要求我们在页面导航之间保存过滤器/排序。
完成此操作的方式是通过发生的事件 ClientLayout。问题是,当用户导航到不同的页面,然后单击浏览器的后退按钮时,事件不会触发,并且会显示未过滤的网格,可能是因为这是缓存的内容。(但是,返回到网格页面的链接会导致页面正确加载,并触发事件。)
我能够解决问题的唯一方法是禁用缓存,如以下链接所示: http ://forums.asp.net/p/1304752/2563283.aspx
显然,仅仅因为我能做到,并不意味着它是一个好主意。我知道这可能会影响性能,但谁能告诉我可能出现的任何其他问题?也许 AJAX 问题或控件会发出意外行为?
php - 在 drupal 中不经常更改的数据 - 如何正确执行?
我得到了一个表单(使用表单 api 和 drupal_Get 表单),我得到了一个包含 50 个字段的表单,其中一些是不经常更改的数据,如爱好、出生年份、城市/国家等……我目前只在数组中执行它们在文件中并将它们放入 #options=>$array ...这是节省资源的最快方法吗?还是我应该使用分类/变量集/数据库查询/块/节点或其他什么?
php - Zend - 如何在会话表上启用缓存(元数据)?
我正在使用 Zend_Session_SaveHandler_DbTable 将会话存储在表中
我的分析器告诉我,在每个页面请求上,zend 都会:
# 查询时间
(1)连接0.0032038688659668
(2) 描述session
0.0041539669036865
(3) SELECT session
.* FROM session
WHERE ((( session
. session_id
= '7nnan8ltd6h64sigs6dlkicvh0' AND session
. save_path
= '' AND session
. name
= 'PHPSESSID'))) 0.00057697296142578
总时间:0.008 秒
当我对其他表进行查询时,zend 对它们进行一次 DESCRIBE(它第一次访问该表时),然后如果我刷新页面它只进行没有描述的查询,在会话表上它会在每个页面上进行 DESCRIBE(因为我使用身份验证...)
我怎样才能只缓存会话表上的元数据?
我目前正在使用这个
这是我的配置文件
这是我的会话表
感谢:D
cache-control - 缓存问题 - 如何识别有问题的服务器
嗨,我替换了现有网站。一个页面的 url 恰好与旧站点上的一个 url 匹配。当我尝试访问此网址时,我可以看到旧内容。是否可以调试旧站点的此副本来自何处?我已经确定它是我和我们的主机之间的服务器,因为我在基于 Web 的代理和我的 android 上获得了相同的内容。
另外我将如何更新缓存?
我们的主机是 Webfusion,我们的域名是 123reg
ajax - .htacces AJAX 请求的缓存控制
我的网站上有一个页面,当用户单击按钮时会发出 AJAX GET 请求,例如要获取的 url 如下所示:
使用这两个值返回的getData.php
值不会改变(至少几个月),那么如何在我的 .htaccess 文件中实现缓存控制以告诉浏览器将结果缓存一段时间?
比如我告诉浏览器缓存js和css文件的方式如下:
^ 这会将缓存控制标头设置为 30 天。
任何帮助将非常感激。
谢谢
flash - ActionScript - 位图缓存与图像资产性能
我创建了一个全光谱色轮 Sprite 对象,它由 1440 个矢量三角形组成,或者如果你愿意的话。
因为我想为色轮设置动画,所以我激活了显示对象的 cacheAsBitmap 属性。但是,将矢量缓存为位图并不会提高动画期间的性能——它仍然很慢、很跳跃。
通过无损压缩将色轮的 PNG 屏幕截图导入库中,将其转换为 Sprite,然后旋转这个新的图像资源,在动画过程中表现出色。
为什么未压缩的 PNG 图像资产导入输出执行相同的矢量图像,并将 cacheAsBitmap 属性设置为 true?
safari - 防止在 Safari 5 中的后退按钮上缓存
截至最近 safari 5 发布,结果证明我的网站出现了一些问题。我有一个运行经典 ASP 的动态网站(尽管这并不重要),并且该网站对历史堆栈进行了一些创造性的使用。例如,您可以在列出产品的页面上,然后转到有关产品的详细信息并更改产品(管理员视图)。当您单击产品上的保存时,信息将通过 AJAX 发送到服务器,并且history.back()
发出。这适用于所有浏览器(包括 safari <= 4),但是,在新发布的 safari 5 中它停止工作。似乎当您在 safari 5 中单击返回时,它实际上并没有刷新页面,它只是从缓存中加载它,这意味着在详细信息视图中所做的更改不会显示。我怎样才能在 safari 5 中也能做到这一点?这是我必须关闭缓存的当前代码(包含在每个页面的顶部):
ruby-on-rails-3 - 如何在 Rails 3 中生成资产 ID 来控制缓存?
在 Rails 中,当提供静态文件时,您会得到一个asset ID
附加到 URL 的内容,例如,
这样,如果文件的时间戳改变并且浏览器自动请求新文件,静态文件的 URL 也会改变。
我看到通过使用包含静态资产的辅助方法 ---stylesheet_link_tag
和--- Rails 自动将时间戳添加javascript_include_tag
到image_tag
对这些文件的所有引用。
如何为没有此类辅助方法的其他资产(
例如 .swf
文件)实现类似的东西?
(这个强制重新下载的“策略”有名字吗,如果有,叫什么名字?)