问题标签 [http-caching]

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 投票
3 回答
8968 浏览

browser-cache - 浏览器如何处理过期标头、缓存控制标头、最后修改标头?

我是一名 Web 开发人员,曾使用过 PHP 和 .NET。有一年多的网络工作经验,对浏览器的缓存功能还不是很了解,希望这里的网络高手可以帮到我。我心中的问题是:

  • 浏览器实际上是如何缓存东西的,它是否请求查看缓存的文件是否在服务器上发生了变化,
  • 什么是开发人员充分利用浏览器缓存的理想方式,同时也能够毫不费力地在网站上推送新的更改。我认为如果浏览器以某种方式缓存我的 CSS、JS 和图像,然后每次都检查它们对服务器的修改,这可以解决问题。但我不知道该怎么做。
0 投票
1 回答
78 浏览

html - 网站文件缓存?

我想知道某些文件(如 css、html 和 js)需要被.htaccess设置缓存多长时间,以及为什么每种文件类型的时间设置不同?

在几个例子中,我看到有人将 html 缓存 10 分钟,将 js 缓存一个月,将图像缓存一年。

0 投票
3 回答
2246 浏览

php - 如何强制 PHP 的 fopen() 返回网页的当前版本?

这个谷歌文档页面当前内容是:

替代文字 http://www.deviantsart.com/upload/i9k01q.png

但是,当使用以下 PHP fopen()脚本阅读此页面时,我得到了一个较旧的缓存版本:

替代文字
(来源:deviantsart.com

我尝试了这个问题中提出的两种解决方案(随机属性和使用 POST),我也尝试了clearstatcache()但我总是得到网页的缓存版本。

为了使 fopen() 返回网页的当前版本,我必须在以下脚本中进行哪些更改?

添加:取出$op​​ts$context也会给我一个缓存页面:

添加:这个发送 Firefox 用户代理的curl脚本也返回缓存的版本:

0 投票
1 回答
1824 浏览

.htaccess - 缓存控制和过期不起作用

我设置了缓存控制并通过 .htaccess 使标头过期,但它已经没有从浏览器缓存中加载。当我输入 URI 时,我正在等待来自网站的加载。

网址: http: //www.btgmaslak.com/static/images/main_container_background_11.jpg

0 投票
2 回答
461 浏览

http - 您如何在客户端缓存文件以使浏览器停止甚至不再费心再次请求它?

我发回带有以下 HTTP 响应标头的图像:

我的理解是,浏览器甚至不应该在 24 小时内(86,400 = 60s * 60m * 24h)请求这个文件

我在后续请求中看到的是它仍然要求文件,但返回“304 未修改”。这很好,但我什至想删除那个请求/响应。

需要什么标头来防止浏览器甚至懒得请求文件,只是让它盲目地使用它在本地缓存中的文件,直到该文件过期?

0 投票
3 回答
10730 浏览

ruby-on-rails - 使用 send_data 时如何设置 Expires: 标头

我的控制器中有一个使用 send_data 的方法,如下所示:

使用 expires_in 会导致像这样发送标头:

我想做的是添加一个标题,Expires: (some exact date)以防止用户代理重新验证。但我看不到如何让 send_data 设置该标头?

我想我可以response.headers哈希中明确设置它,但肯定必须有一个包装器(或其他东西)?

0 投票
1 回答
551 浏览

http - ASP.NET:如何强制重新加载 Web 静态文件

在处理网页时,客户端/浏览器决定是否更新图像或 .css 或 .js 之类的文件,或者是否从缓存中获取文件。

如果是 .aspx 页面,则由服务器决定。

当然,在 IIS 级别上或者也使用一些 HttpModule 技术,我可以更改请求的标头以告诉客户端是否应该缓存文件以及应该缓存多长时间。

现在,我确实有一个网站,其中 .aspx 与相应的 .js 携手并进。所以,也许我在 .js 中有一些 jQuery 代码可以访问 .aspx 中的元素。如果我从 .aspx 中删除该元素,我也会调整 .js。如果用户访问我的页面,他将获得新的 .aspx,但仍可能获得旧的 .js,从而产生有趣的效果。

我的网站使用大量脚本和大量图像。出于性能原因,我在 IIS 中配置这些文件“永不过期”。

现在,有时文件确实会更改,我想确保用户获得更新文件。

一开始,我通过重命名文件来帮助自己。所以,我有 SkriptV1.js 和 SkriptV2.js 等等。这是最糟糕的选择,因为存储库历史记录已损坏,我需要同时调整引用和文件名。

现在,我在此处进行了改进,并使用 Skript.js?v=1 或 Skript.js?v=2 仅更改了引用。这会强制客户端刷新文件。它工作正常,但我仍然必须调整参考。

现在,这里有一个进一步的改进,如下所示:

因此,“GetScriptLastModified”将附加 ?v= 参数,如下所示:

因此,呈现的 .js-Link 在客户端看起来像这样:

每次上传新版本时,链接都会更改,我可以确保用户在更改时立即获得新的脚本或图像。

现在,有两个问题:a)有没有更优雅的方法来实现这一点?b) 如果不是:有人猜测服务器上的性能开销有多大?一页上很容易有 50 个版本化元素,因此对于一个 .aspx,GetScriptLastModified 将被调用 50 次。

期待讨论:)

0 投票
2 回答
1817 浏览

java - 如何使 HTTP 缓存头工作

有人可以帮我解决 HTTP 缓存问题吗?

我认为如果我设置了“Expires”和“Cache-Control:max-age”请求标头,那么浏览器在 max-age 过去之前不会发出 GET 请求?

我的服务器看到很多有条件的 GET 请求,它以 304 回复。但是,如果可能,我想消除这些有条件的 GET,并让浏览器仅在认为资源已过期时才请求资源。

以下是我从 Chrome 中的开发人员工具中获得的详细信息:

请求标头:

响应标头:

我在我的 Java 代码中的过滤器中设置了缓存标头。代码在 Oracle 的 OC4J 上运行。

另外,我想通过 HTTPS 运行它。使用相同的标头是否也适用于 HTTPS?

提前致谢。

0 投票
1 回答
642 浏览

.net - 使用 ASP.NET HttpCache 缓冲来自 Web 服务的数据

使用 HttpCache 缓冲来自 Web 服务的数据,而不是将相同的数据存储在数据库表中,我可能会遇到什么问题?在服务暂时不可用的假设情况下,如果服务器需要在此期间重新启动,则无法重新填充缓存。因此,出于这个原因,是否可以像使用 SqlServer 会话状态一样持久化缓存?

我读到 HttpCache 是使用 Singleton 模式实现的。这是否意味着在处理来自缓存的对象时应该使用 Mutex?

如果缓存一方面被一个单独的线程进程更新,同时也被另一个线程读取,会发生什么?

谢谢。

0 投票
1 回答
2020 浏览

internet-explorer - IE 忽略更新的缓存控制标头

我有一个网站目前允许缓存其图像,但是,决定不再允许缓存。因此,我开始将缓存控制和 Expires 标头添加到响应标头中。

但是我注意到 IE 仍然在图像上发出条件请求,并且服务器以 304 响应进行响应。在 304 响应中,我看到更新的缓存控制和过期标头,但 IE 继续使用缓存中的图像。无论我刷新或打开和关闭浏览器多少次,它仍然使用缓存的图像。只有在我清除缓存文件夹后,IE 才会最终监听缓存控制标头。

我想知道是否有人可以为我解释 IE 中的这种行为。这是一个 IE qurk 还是我不了解缓存控制。谢谢,

注意:当我提到网站允许缓存图像时,这是通过根本不提供任何 Cache-control 或 Expire 标头来完成的。仅使用了 ETag 标头。