问题标签 [browser-cache]

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 投票
2 回答
838 浏览

amazon-s3 - 平衡浏览器对图像的缓存和链接的过期时间,以避免带宽被盗

我们将图像托管在 Amazon S3 上,并通过 Amazon Cloudfront 提供服务。我们想减少我们的带宽费用。我们相信我们有相当多的带宽被盗,并希望开始使用签名 URL 来防止这种情况。但是,我们必须平衡这一点,因为每次我们发送一个新的签名 url,它都会使浏览器缓存的图像无效。

我们目前的计划是生成一个有效期为两个月的签名网址,然后在本地缓存并服务一个月,然后再生成一个新的签名网址。这将允许浏览器缓存图像更长时间。但是,这也意味着任何人都可以在长达两个月的时间内为图像占用带宽。

有什么方法可以让链接更快过期,但浏览器是否会继续缓存该图像?我知道当 url 为新的时间戳而辞职时,图像的 etag 和 If-Modified-Since 不会改变,但是浏览器不再知道在标头中发送这些值,因为就它而言,这是一个新网址。有没有办法解决这个问题?

0 投票
2 回答
123 浏览

ruby-on-rails - Will caching work if one of the web servers has a clock that is slightly off?

It is said that the web servers' clocks must be identical for the Expires and Cache-Control headers to work? Why is that? Can't they be off by 1 second or a few minutes?

If the cache is supposed to be good for 1 year, then won't a time difference of a few minutes or even a few hours not matter on one or some of the web servers?

In the documentation it is said that:

note that in order for this [caching] to work, all your application servers must return the same timestamps. This means that they must have their clocks synchronized. If one of them drifts out of sync, you‘ll see different timestamps at random and the cache won‘t work. In that case the browser will request the same assets over and over again even thought they didn‘t change. You can use something like Live HTTP Headers for Firefox to verify that the cache is indeed working.

0 投票
2 回答
1367 浏览

browser - 浏览器缓存:如果我们更改某些内容会强制用户获取新版本,而不是本地缓存版本

我们经常在我们的网站上进行更改(使用缓存),有时用户不知道刷新页面以获得它的最新副本。

如果我们确实更新了一个页面,我们如何强制用户浏览器知道有一个新的服务器版本,并使用它而不是他们的浏览器缓存页面?

0 投票
8 回答
124574 浏览

html - 将“?v=1”附加到链接和脚本标签中的 CSS 和 JavaScript URL 有什么作用?

我一直在查看 HTML 5 样板模板(来自http://html5boilerplate.com/),并注意到"?v=1"在引用 CSS 和 JavaScript 文件时使用 in URL。

  1. 在链接和脚本标签中附加"?v=1"到 CSS 和 JavaScript URL 有什么作用?
  2. 并非所有 JavaScript URL 都具有"?v=1"(以下示例中的示例:js/modernizr-1.5.min.js)。这是有原因的吗?

来自他们的样本index.html

0 投票
3 回答
1264 浏览

java - 如何知道 GWT 中的应用程序版本发生了变化?

我有一个用例,我的 GWT 应用程序在客户端浏览器上运行,我停止了我的 tomcat 并更新了相关的 WAR。
我想要发生的是,一旦我加载了 tomcat,每个现有的客户端都会自动重新加载,因此他们将使用正确版本的应用程序。

目前我面临两个问题:

  1. 我不知道如何向当前加载的应用程序发出信号,表明它已过时并且应该重新加载。我正在考虑以某种方式在我的应用程序中确定 GWT-RPC 失败的原因是 404,因此它应该重新加载,但我不确定如何确定这一点。当然,我不能在每个 GWT-RPC 上重新加载,因为服务器可能会无缘无故地关闭,并且会在一两秒内备份而不会出现问题。
  2. 出于某种原因,moduleName.nocache.js 文件被缓存,所以即使我手动刷新我也可以在服务器上看到 404 请求,因为应用程序正在寻找不存在的资源(以前的版本),一旦我删除缓存浏览器解决了这个问题。有谁知道为什么要缓存它?在这方面,我对服务器设置没有任何改变。

编辑:
1. 似乎没有 GWT 直接的方法可以做到这一点,所以我决定当一个模块加载时,它会收到一个module version,一个 Double,如果 GWT-RPC 失败,模块会向服务器查询其当前module version和如果不匹配,它会重新加载页面。用于查询模块版本的 GWT-RPC 是恒定的,不会出于兼容性原因而更改。这样,即使所有其他 GWT-RPC 方法更改了模块,也可以保证此方法有效。
2. 多亏了 BalusC 的建议,该文件似乎只缓存了 5-10 分钟,这就是为什么我一直在该区域看到非确定性行为。我打开了另一个问题关于如何在单个 js 文件上设置标头,因为我在某处读到它与容器相关而不是与 GWT 相关。谢谢,
伊泰

0 投票
4 回答
2499 浏览

asp.net-mvc - SSL握手问题?(以前:网页挂起,只有清除浏览器缓存有帮助)

请看最后,因为我会不断更新最新的调查数据。目前,我需要有关服务器端 WireShark 日志的帮助。

我在使用 ASP.NET MVC Web 应用程序时遇到了奇怪的问题。很少有用户会遇到表单发布超时和挂起的情况,因此单击提交后它只会永远持续并且不会前进到下一页。奇怪的是,这是通过清除浏览器的缓存来解决的。我不明白这两件事如何相关。此外,一位用户报告说它发生在 FireFox 3+ 中,但不会发生在 FireFox 1.5 和 2.0 中。我和许多用户无法在 IE、任何 FireFox 和 Linux/Windows 上重现这一点。

浏览器缓存如何以及为什么会影响表单 POST 处理?

好的,我检查了用户和 FireBug。我看到了 POST 请求,但在长时间超时后它失败了。服务器没有收到请求 - 至少,在我进行日志记录的基本控制器的 OnBeforeExecuting 中,也没有在 IIS 日志文件中。响应为空。此外,一旦请求花费了很长时间但最终执行 - 在服务器上,我发现执行时间非常短。

据我所知,这发生在使用 jQuery Form 插件完成的 AJAX 请求上。我尝试在参数中设置 cache: false ,没有成功。

实际上,我尝试不使用 AJAX,直接提交 - 一样。我还可以看到 jQuery 表单插件确实调用 $.ajax() 并返回。我看到它启动了 POST 请求。但我没有在 IIS 日志中看到服务器上的这个请求,直到有时,在一分钟后 - 有时它在 FireBug .Net 窗格中被中止。

有趣的是,清除 FireFox 缓存/cookies/form&post 数据会有所帮助——一次尝试,下一篇文章也会挂起。

此外,请求以 GUID 的形式发送有关所选组件的信息。当未选择组件时,它似乎可以正常工作。组件实际上是由 JavaScript 检查的隐藏复选框(不是在提交时,更早)。这是 POST 数据中的“selected”参数。好像没有选择组件时,它不会挂起,虽然我只尝试过一次,也许以后会调查更多。

对此附加信息有任何想法吗?

发布数据

为了= 842f2988-abff-413C-a092-9dde00a8b9a8&选定= f98c9ad8-49e0-4a9f-9966-9d3d01203aa5_a1d659c0-b8ec-4f91-ba2f-9d3d01203a4c&选定= f98c9ad8-49e0-4a9f-9966-9d3d01203aa5_d6e1984e-227D-4bd0-b8d2-9d3d01203a4d&选定= f98c9ad8- 49e0-4a9f-9966-9d3d01203aa5_0b7cbc1a-35f1-4db8-856b-9d3d01203a4c&选定= f98c9ad8-49e0-4a9f-9966-9d3d01203aa5_0cc7ef9b-085f-4b50-ACDB-9d3d01203a4c&选定= f98c9ad8-49e0-4a9f-9966-9d3d01203aa5_ad273397-ed5d-49bb-b181- 9d3d01203a4c&选定= f98c9ad8-49e0-4a9f-9966-9d3d01203aa5_b5fbf67f-202f中-464B-a9e4-9d3d01203a4c&选定= f98c9ad8-49e0-4a9f-9966-9d3d01203aa5_ae275579-8163-4f6b-9d36-9d3d01203a4c&选定= f98c9ad8-49e0-4a9f-9966-9d3d01203aa5_73fa066c-0467- 4bc6-aa91-9d3d01203a4c&selected=f98c9ad8-49e0-4a9f-9966-9d3d01203aa5_5020b52f-baa2-4aea-be10-9d3d01203a4d&selected=f98c9ad8-49e0-4a9f-9966-9d3d01203aa5_8b2cd95a-c014-4c83-9ec6-9d3d01203a4d&selected=f98c9ad8-49e0-4a9f-9966-9d3d01203aa5&submit=Add+To+Suite

安装了 WireShark。没有直接控制就很难使用(远程用户遵循我的命令),但我可以看到在单击提交后立即向服务器 IP 地址发送了一个 TCP 请求。所以浏览器发出请求。

要求远程用户与 IT/网络支持合作,检查请求是否从客户端/到达服务器。

这是一个非常相似的问题,不幸的是没有任何答案:https ://stackoverflow.com/questions/3355000/my-iis-server-wont-serve-ssl-sites-to-some-browsers

这是来自服务器的 WireShark 日志。提交开始,然后发生一些 SSL 更改密码/握手(在 90 秒内!),然后经过长时间的请求最终失败。

0 投票
3 回答
3936 浏览

cross-browser - 如何在后台预加载 JavaScript 和 CSS 文件,以便在用户进入主页时将它们准备好在浏览器缓存中?

我想在登陆转换后从登陆页面预加载一个 JS 文件和一个 CSS 文件以优化主站点加载。我一直在寻找有关此的信息,最后尝试使用以下方法完成此操作:

Firefox 如此出色,但对于 Chrome,XHR 调用似乎缓存在与 css 和 js 文件不同的缓存中。我们不使用 JQuery,着陆页必须是轻量级的(负载更少,转化率更高)。

您对解决原始问题的另一种方法有什么建议吗?(预加载组件)

你知道如何让 Chrome 缓存这些请求吗?

0 投票
2 回答
216 浏览

javascript - jQuery html 响应

是否可以确定$.ajax返回的响应是从浏览器的缓存中提供的还是新鲜的?

谢谢。

0 投票
3 回答
2543 浏览

javascript - 禁用浏览器缓存

我实现了一个 REST 服务,并且我使用一个网页作为客户端。我的页面有一些 javascript 函数,它们对 REST 服务器执行多次相同的 http get 请求并处理回复。

我的问题是浏览器缓存了第一个回复,实际上并没有发送以下请求..

有没有办法强制浏览器执行所有请求而不进行缓存?我正在使用 Internet Explorer 8.0

谢谢

0 投票
3 回答
641 浏览

internet-explorer - IE6 不缓存我的图片

我已经在我的生产 Tomcat Web 服务器中上传了我的 Web 应用程序。
我正在尝试对其进行测试,它在 FF/IE7/IE8 上运行良好,但在 IE6 上显示时出现问题。

我在状态栏中注意到 IE6 似乎不时下载图像。即使我没有点击任何东西,它仍然会下载图像。

我正在使用一个使用图像的菜单,但它在 IE6 上显示效果不佳。问题是我 60% 的目标用户在这个浏览器上运行。

我开始认为这是浏览器缓存问题。在我所有的 JSP 中,我将所有 head 部分的元标记放在下面。我这样做是因为我的应用程序严重依赖 Ajax,并且我需要我的 Web 资源的最新副本。

这可能是罪魁祸首吗?有什么解决方法吗?如何强制 IE6 缓存这些图像?谢谢。

我不确定这是否是您正在寻找的东西,但如果我错过任何东西,请告知。

这是正在下载的图像的示例。我忘了提到这个应用程序只在我们本地的 Intranet 网站上运行。

@Pekka,这是您要找的东西吗?