2017-01-12 55 views
0

我希望两个I帧指示浏览器缓存忽略某些网址参数

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

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

传递一个单独的PARAM或使运行时单独调用不会在用例

+0

如果'www.URL.com?name = benny&runtime = 1231231'和'www.URL.com?name = benny&runtime = 757847584'指向相同的资源,为什么首先需要'runtime'参数?你可能应该从这些URL中移除'runtime'参数。 –

+0

列昂尼德这是一个例子,运行时实际上并不是参数 – BYC

回答

0

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

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

主缓存键由请求方法和目标URI组成。然而,由于当前常用的HTTP缓存通常限制为 以缓存对GET的响应,所以许多缓存简单地拒绝其他方法 并且仅使用该URI作为主缓存密钥。

对于由Eric Bidelman,XMLHttpRequest pageBlob Web APIs pageSame-origin policy page上MDN更多信息检查New Tricks in XMLHttpRequest2 article

如果您控制为您的资源提供服务的服务器,还可以调整它以根据特定参数更改缓存条目。例如在ASP.NET MVC中,您可以使用OutputCache属性的VaryByParam属性。有关更多信息,请访问Microsoft ASP.NET团队,查询Improving Performance with Output Caching article

+0

解决方案是改变?到#因为缓存忽略缓存后面的所有内容 – BYC

+0

'?'表示URI的查询组件开始。 '#'表示片段组件的开始。严格来说,浏览器HTTP缓存不会忽略片段,而是浏览器不会发送它。查询和片段是不同的东西,并存在不同的目的。要了解片段是否适合您的情况,您可以查看[query](https://tools.ietf.org/html/rfc3986#page-23)和[fragment](https://tools.ietf.org/html/rfc3986#page-24)URI规范的各个部分。 –