我正在使用ETag
header 用于缓存,浏览器发送相应的If-None-Match
标头。最初,我只是简单地比较了这些标头,结果很有效。
后来我想到rfc2616 https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html允许实体列表,所以我修复了它。问题是,如果修复被使用过......
- 浏览器是否曾经发出过带有以下内容的请求
If-None-Match
标头包含多个实体?
- 现实世界还有其他用途吗?
我能想到两个用例:浏览器和缓存代理实体标签的联合以及自定义客户端缓存实现。
虽然,我从未见过浏览器使用多个实体标签来处理请求If-None-Match
,有些缓存代理可能拥有自己的请求资源版本。它们可能会取代If-None-Match
在将请求进一步发送到服务器之前,由浏览器发送,并结合浏览器的资源版本实体标签和代理资源版本实体标签。这样,如果代理具有所请求资源的新版本,您可以通过从代理而不是服务器提供完整响应(带有正文负载)来减少服务器负载。这个案例的描述是RFC 7234 超文本传输协议 (HTTP/1.1):缓存 https://www.rfc-editor.org/rfc/rfc7234#section-4.3.2:
当缓存决定重新验证其自己存储的响应时
包含实体标签 If-None-Match 列表的请求,缓存
可以将接收到的列表与其自身的实体标签列表相结合
存储的一组响应(新鲜的或陈旧的)并发送
两个列表作为替换 If-None-Match 头字段值
转发的请求。
我不能说 RFC 7234 这部分的支持是否广泛,但肯定有支持它的代理。查看Node.js 缓存反向 HTTP 代理 https://github.com/colinmollenhour/node-caching-proxy科林·莫伦小时的项目。
另一方面,您可能不想依赖浏览器来执行条件请求。您可以设置If-None-Match
自己使用的HTTP标头值XMLHttpRequest.setRequestHeader()
。如果您使用以下方式存储资源的多个版本,这会很有用网络存储API https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API, 缓存API https://developer.mozilla.org/en-US/docs/Web/API/Cache或其他机制。服务器响应必须包含ETag
带有实体标签的 HTTP 标头。该实体标签指示哪个版本的资源被认为是最新的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)