问题标签 [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.

0 投票
1 回答
387 浏览

http - 无法让浏览器缓存内容

抱歉,这似乎与许多其他问题非常相似,但我查看了我能看到的所有相关帖子,但它们似乎与我没有完全相同的问题 ;-)

问题是我无法让 .js、.css 和图像的客户端缓存从我的 Apache2 服务器(我有 Ubuntu Apache/2.2.8 和 Windows 下的 WAMP Apache)工作。

使用默认设置,我可以获得良好的 ETag 风格的服务器主导的缓存(304 响应),但是如果我通过将 Header Unset 命令放入我的虚拟主机配置文件中来关闭它,然后补充缓存指令(见下文),它不会似乎受到浏览器的尊重。

我可以看到使用 Firebug 浏览器知道缓存文件在另外几个小时内有效,但它仍然要求它。

任何有关如何调试的提示都将受到欢迎。

主机配置的相关部分如下所示:

0 投票
10 回答
28331 浏览

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 XmlHttpRequestCOM 对象:

  • CLSID:{88d96a0a-f192-11d4-a65f-0040963251e5}
  • 程序 ID:Msxml2.XMLHTTP.6.0

更新二

max-age指令由客户端添加,以使所有缓存都遵守。来自 RFC:

Cache-Control 通用标头字段用于指定 请求/响应链上的所有缓存机制必须遵守的指令。这些指令指定旨在防止缓存对请求或响应产生不利影响的行为。这些指令通常会覆盖默认缓存算法。缓存指令是单向的,因为在请求中存在指令并不意味着要在响应中给出相同的指令。

Max-age 不适用于服务器;对服务器来说毫无意义。它适用于用户和服务器之间的所有缓存系统。

更新三

来自W3C XmlHttpRequest

如果用户代理实现了一个 HTTP 缓存,它应该尊重 Cache-Control由设置的请求头setRequestHeader()(例如, Cache-Control: no-cache绕过缓存)。除非最终用户明确请求此类行为(例如通过重新加载页面),否则它不得自动发送Cache-Control 或请求标头。Pragma

按照他们的示例,我尝试使用该no-cache指令:

并且XmlHttpRequest客户端仍然完全从缓存中服务请求,根本不查询服务器。

W3C 说,如果有缓存,它必须尊重Cache-Control如果它是通过设置的setRequestHeader。Microsoft 的 XmlHttpRequest 似乎没有满足这一要求。

0 投票
1 回答
752 浏览

c# - ASP.NET 禁用页面级缓存问题/危险?

基本上,我禁用缓存的原因是因为我有 DevExpress ASPxGridViews,它非常适合过滤、排序等,但客户端正在处理大量数据,并要求我们在页面导航之间保存过滤器/排序。

完成此操作的方式是通过发生的事件 ClientLayout。问题是,当用户导航到不同的页面,然后单击浏览器的后退按钮时,事件不会触发,并且会显示未过滤的网格,可能是因为这是缓存的内容。(但是,返回到网格页面的链接会导致页面正确加载,并触发事件。)

我能够解决问题的唯一方法是禁用缓存,如以下链接所示: http ://forums.asp.net/p/1304752/2563283.aspx

显然,仅仅因为我能做到,并不意味着它是一个好主意。我知道这可能会影响性能,但谁能告诉我可能出现的任何其他问题?也许 AJAX 问题或控件会发出意外行为?

0 投票
2 回答
44 浏览

php - 在 drupal 中不经常更改的数据 - 如何正确执行?

我得到了一个表单(使用表单 api 和 drupal_Get 表单),我得到了一个包含 50 个字段的表单,其中一些是不经常更改的数据,如爱好、出生年份、城市/国家等……我目前只在数组中执行它们在文件中并将它们放入 #options=>$array ...这是节省资源的最快方法吗?还是我应该使用分类/变量集/数据库查询/块/节点或其他什么?

0 投票
2 回答
3963 浏览

php - Zend - 如何在会话表上启用缓存(元数据)?

我正在使用 Zend_Session_SaveHandler_DbTable 将会话存储在表中

我的分析器告诉我,在每个页面请求上,zend 都会:

# 查询时间

(1)连接0.0032038688659668

(2) 描述session 0.0041539669036865

(3) SELECT session.* FROM sessionWHERE ((( session. session_id= '7nnan8ltd6h64sigs6dlkicvh0' AND session. save_path= '' AND session. name= 'PHPSESSID'))) 0.00057697296142578

总时间:0.008 秒

当我对其他表进行查询时,zend 对它们进行一次 DESCRIBE(它第一次访问该表时),然后如果我刷新页面它只进行没有描述的查询,在会话表上它会在每个页面上进行 DESCRIBE(因为我使用身份验证...)

我怎样才能只缓存会话表上的元数据?

我目前正在使用这个

这是我的配置文件

这是我的会话表

感谢:D

0 投票
0 回答
81 浏览

cache-control - 缓存问题 - 如何识别有问题的服务器

嗨,我替换了现有网站。一个页面的 url 恰好与旧站点上的一个 url 匹配。当我尝试访问此网址时,我可以看到旧内容。是否可以调试旧站点的此副本来自何处?我已经确定它是我和我们的主机之间的服务器,因为我在基于 Web 的代理和我的 android 上获得了相同的内容。

另外我将如何更新缓存?

我们的主机是 Webfusion,我们的域名是 123reg

0 投票
1 回答
1355 浏览

ajax - .htacces AJAX 请求的缓存控制

我的网站上有一个页面,当用户单击按钮时会发出 AJAX GET 请求,例如要获取的 url 如下所示:

使用这两个值返回的getData.php值不会改变(至少几个月),那么如何在我的 .htaccess 文件中实现缓存控制以告诉浏览器将结果缓存一段时间?

比如我告诉浏览器缓存js和css文件的方式如下:

^ 这会将缓存控制标头设置为 30 天。

任何帮助将非常感激。

谢谢

0 投票
1 回答
896 浏览

flash - ActionScript - 位图缓存与图像资产性能

我创建了一个全光谱色轮 Sprite 对象,它由 1440 个矢量三角形组成,或者如果你愿意的话。

因为我想为色轮设置动画,所以我激活了显示对象的 cacheAsBitmap 属性。但是,将矢量缓存为位图并不会提高动画期间的性能——它仍然很慢、很跳跃。

通过无损压缩将色轮的 PNG 屏幕截图导入库中,将其转换为 Sprite,然后旋转这个新的图像资源,在动画过程中表现出色。

为什么未压缩的 PNG 图像资产导入输出执行相同的矢量图像,并将 cacheAsBitmap 属性设置为 true?

0 投票
3 回答
18860 浏览

safari - 防止在 Safari 5 中的后退按钮上缓存

截至最近 safari 5 发布,结果证明我的网站出现了一些问题。我有一个运行经典 ASP 的动态网站(尽管这并不重要),并且该网站对历史堆栈进行了一些创造性的使用。例如,您可以在列出产品的页面上,然后转到有关产品的详细信息并更改产品(管理员视图)。当您单击产品上的保存时,信息将通过 AJAX 发送到服务器,并且history.back()发出。这适用于所有浏览器(包括 safari <= 4),但是,在新发布的 safari 5 中它停止工作。似乎当您在 safari 5 中单击返回时,它实际上并没有刷新页面,它只是从缓存中加载它,这意味着在详细信息视图中所做的更改不会显示。我怎样才能在 safari 5 中也能做到这一点?这是我必须关闭缓存的当前代码(包含在每个页面的顶部):

0 投票
2 回答
894 浏览

ruby-on-rails-3 - 如何在 Rails 3 中生成资产 ID 来控制缓存?

在 Rails 中,当提供静态文件时,您会得到一个asset ID附加到 URL 的内容,例如,

这样,如果文件的时间戳改变并且浏览器自动请求新文件,静态文件的 URL 也会改变。

我看到通过使用包含静态资产的辅助方法 ---stylesheet_link_tag和--- Rails 自动将时间戳添加javascript_include_tagimage_tag对这些文件的所有引用。

如何为没有此类辅助方法的其他资产(
例如 .swf文件)实现类似的东西?

这个强制重新下载的“策略”有名字吗,如果有,叫什么名字?