【问题标题】:Instructing browser cache to ignore certain URL params指示浏览器缓存忽略某些 URL 参数
【发布时间】:2017-01-12 14:30:33
【问题描述】:

我想要两个 iframe

 <iframe src="www.URL.com?name=benny&runtime=1231231>
 <iframe src="www.URL.com?name=benny&runtime=757847584>

它们在不同时间加载以映射到浏览器中的相同缓存值。服务器与此无关。基本上,有没有办法让chrome,firefox等......缓存api在查找src时忽略某些参数(在这种情况下为'runtime')。

传递单独的参数或单独调用运行时在用例中不起作用

【问题讨论】:

  • 如果www.URL.com?name=benny&amp;runtime=1231231www.URL.com?name=benny&amp;runtime=757847584 都指向相同的资源,为什么首先需要runtime 参数?您可能应该从这些 URL 中删除 runtime 参数。
  • Leonid 是一个例子,runtime 实际上不是参数

标签: caching iframe browser-cache


【解决方案1】:

这是不可能的。您需要从src 中删除具有不同值的参数,或者使用XMLHttpRequest 和blob 来请求资源,并使用JavaScript 从请求URI 中删除参数。如果您将使用XMLHttpRequest,您还需要考虑同源策略。

浏览器缓存键是 HTTP 方法和 URI 的组合。查询参数是 URI 的一部分。相关摘自HTTP 1.1 specification

主缓存键由请求方法和目标 URI 组成。 但是,由于当今常用的 HTTP 缓存通常是有限的 为了缓存对 GET 的响应,许多缓存只是拒绝其他方法 并且只使用 URI 作为主缓存键。

有关更多信息,请查看 MDN 上 Eric Bidelman 的 New Tricks in XMLHttpRequest2 articleXMLHttpRequest pageBlob Web APIs pageSame-origin policy page

如果您控制为您的资源提供服务的服务器,您还可以调整它以通过某些参数改变缓存条目。例如,在 ASP.NET MVC 中,您可以使用 OutputCache 属性的 VaryByParam 属性。如需更多信息,请查看 Microsoft ASP.NET 团队的Improving Performance with Output Caching article

【讨论】:

  • 解决方案是改变 ?到 # 因为缓存会忽略缓存之后的所有内容
  • ? 表示 URI 的查询组件的开始。 # 表示片段组件的开始。严格来说,浏览器 HTTP Cache 不会忽略片段,而是浏览器不会发送它。查询和片段是不同的东西,存在不同的目的。要了解片段是否适合您的情况,您可以检查 URI 规范的 queryfragment 部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多