在 Chrome 中使用 window.location.reload 从缓存加载和哈希片段不起作用

2024-01-03

我需要用 Javascript 重新加载页面。我用window.location.reload为了这个目的。现在,我在 Chrome 中观察到一个奇怪的行为:Chrome 总是连接到服务器并询问文档是否被修改。虽然一个304 Not Modified返回后,仍然存在我想避免的到服务器的往返。

我也尝试过明确使用window.location.reload(false)告诉chrome使用缓存,但没有成功。并不是说我在重新加载的 URL 中有一个活动的哈希 (#) 片段。

资源的响应头如下:

HTTP/1.1 304 Not Modified
Server: nginx/1.2.2
Date: Sat, 01 Jun 2013 13:19:56 GMT
Last-Modified: Sat, 01 Jun 2013 13:04:55 GMT
Connection: keep-alive
Expires: Sun, 02 Jun 2013 13:19:56 GMT
Cache-Control: max-age=86400
Access-Control-Allow-Origin: *

So, the Cache-ControlExpiresheader 都已设置,并且应该告诉 chrome 不要在 24 小时内更新资源。

我不使用 F5/CMD+R 重新加载页面,而是单击一个链接,该链接将有一个将发生变化的 javascript 事件window.location.hash然后打电话window.location.reload(false)。但 Chrome 不断设置Cache-Control: max-age=0请求的标头 - 我不想要它。 Chrome 应该使用它的内部缓存,并且根本不向服务器发送任何内容。

同样的代码使用Firefox没有问题,FF使用的是缓存版本,根本不需要连接服务器。

我怎样才能解决这个问题?

编辑:这是一个简单的示例,您可以用来自己尝试:http://webspace.markdown.io/reloadtest.html http://webspace.markdown.io/reloadtest.html

编辑:我关闭了开发人员工具并通过验证标头tcpdump -s 1024 -l -A dst port 80在服务器上。我还在开发人员工具中取消选中“禁用浏览器缓存”。

编辑 2:请注意,如果关闭选项卡并将 URL 输入到新选项卡中,Chrome 会正确使用缓存。仅单击一个链接(这将导致window.location.reload被影响。


经过更多研究后回答自己:

这根本做不到。

该问题与以下问题无关hash根本没有值,即使您不使用哈希也会出现。

它似乎window.location.reload()不能用于控制当前资源(由window.location.href) 是否从缓存中使用。尽管文档上MDN https://developer.mozilla.org/en-US/docs/Web/API/window.location另有建议。 W3C 官方规范Location对象在window对象也没有太大帮助。

Chrome 和 Firefox 将always执行到服务器的往返,请求当前资源,无论您传递给什么参数.reload()。该参数最初引入是为了强制POST请求重复为GETrequests - 这与缓存无关。 (使用 Firebug 时要小心:我首先认为 FF 不会发送请求,因为它没有在 Firebug 中显示 - 但当您查看网络服务器日志时,您可以看到它实际上发送了请求)。

我可以观察到布尔参数的存在会影响浏览器是否会附加Cache-Control: max-age=0标头到request。但这只是减少了传输的数据,并不会完全消除服务器连接。无论如何,都会进行往返。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Chrome 中使用 window.location.reload 从缓存加载和哈希片段不起作用 的相关文章

  • HTML 和 标签有什么区别?

    HEAD 标签和 BODY 标签有什么区别 大多数 HTML 书籍仅 简短 提及 and 标签 但它们消失得很快 它们会影响浏览器呈现网页的方式吗 另外 它们会影响 javascript 的运行顺序吗 我的意思是 如果我里面有一个javas
  • 返回上一页

    我正在使用表格来 评价 页面 此表单将数据 发布 到其他地方的 php 脚本 我只是想在处理表单后显示一个链接 这将使用户返回到上一页 我可以在 php 脚本中使用 javascript 来执行此操作吗 GF 您可以使用链接来调用histo
  • Visual Studio 改变 Ctrl-K-D 的工作方式

    In Visual Studio I m using 2012 is there any way of editing the way that Ctrl K D combinations handles its Auto Formatti
  • 在 Chrome 中为

    我已经看到这个问题多次出现 但没有任何明确的解决方案 我正在加载一个简单的视频
  • Chrome 开发工具命中代码但未命中断点

    我在 chrome 开发工具上启用了断点 并且在一行上有一个断点 我知道 chrome 正在运行 因为我将断点放在具有以下语句的行上 alert why is this not breaking 如果我在本地主机中找到该文件 则断点有效 断
  • “require(...)”是常见的 JavaScript 模式还是库函数?

    我通常发现这是 node js 脚本 模块以及 phantomJS casperJS 等中的第一行 我很好奇 这是否是服务器端 javascript SSJS 的常见模式 类似于 include在 C C 中或import在 Java 中
  • 如何设置必须输入特定数字的字段?

    我想知道如何创建一个需要输入特定数字或文本的字段 例如 激活码 以及在输入的确认答案的情况下移动到 网页 并且在未确认的情况下移动到 另一页面 的按钮 使用必需的属性
  • fadeOut() 和slideUp() 同时进行?

    我已经发现jQuery 淡出然后滑动 https stackoverflow com questions 734554 jquery fadeout then slideup这很好 但不是那个 我怎么能够fadeOut and slideU
  • 冒泡可用于图像加载事件吗?

    我可以用吗 window addEventListner 某种程度上来说 我所有的图像都有一个display none 图像加载后 我想设置display inline 这样我就可以规范下载图像时显示的内容 在这种情况下 我无法预加载图像
  • 非法使用break语句; javascript

    当这个变量达到一定数量时 我希望循环停止 但我不断收到错误 未捕获的语法错误 非法的中断语句 function loop if isPlaying jet1 draw drawAllEnemies requestAnimFrame loop
  • Aurelia 中的角度服务?

    我还没有找到详细说明如何从 Angular 1 x 迁移到 Aurelia 的详细文档 到目前为止 我只看到人们详细介绍了 Angular 的概念directive可以在 Aurelia 中使用重制 customElement 好吧 足够简
  • 引用自身的 Javascript 对象...有问题吗?

    由于 Javascript 允许通过引用分配复合值 因此如果 Javascript 对象引用自身 它将创建无限的引用集 如控制台中所示 这看起来像是某种无限循环 但 Chrome 似乎没有问题 这样做是否存在任何内存问题或其他风险 就记忆力
  • 如何使用 GreaseMonkey 让浏览器恢复“/”键?

    Lots of web pages seem to use the key for searching I d like to disable that because 100 of the time I want to use to se
  • 标记(Markdown)+ Mermaid(流程图和图表)

    努力去争取 美人鱼 https github com knsv mermaid https github com knsv mermaid跟 共事 标记 https github com chjj marked https github c
  • Vue-Router 抽象父路由

    我正在尝试将当前网站迁移到 vuejs 站点地图必须是 login signup password reset browse search dozens of other routes 由于其中一些路线共享大量 fx 因此我将它们设为父路线
  • 使用ExternalInterface和IE从JavaScript获取Flash中的当前URL

    我正在尝试获取 Flash 播放器当前所在的 URL 不是 swf 文件的 URL 而是浏览器指向的 URL 到目前为止我已经使用过 var st String ExternalInterface call window location
  • 使用 File API polyfill 读取数据 URL

    我正在尝试使用文件 API 库 https github com mailru FileAPI https github com mailru FileAPI 作为不支持文件 API 的浏览器的后备 以便将文件作为数据 URL 读取并将其传
  • 如何获取符号名称(文字)?

    以下情况 var myVehicle brand Tesla var isMoving Symbol var currentStatus Symbol myVehicle isMoving true myVehicle currentSta
  • 使圆圈与 d3.js 上的多线匹配相同的颜色过滤?

    我有一个多线图 当按每种水果过滤时会更新 每条线条颜色对应不同的销售年份 在 的帮助下Shashank https stackoverflow com users 5569282 shashank 每个数据点线上的圆圈已添加到组中 而不是直
  • 区分 NaN 输入和输入类型为“number”的空输入

    我想使用 type number 的表单输入 并且只允许输入数字

随机推荐