【发布时间】:2021-08-16 05:08:08
【问题描述】:
说一个客户端做了一个跨域请求读取一个对象,通过了,客户端缓存了结果。现在,客户端发出一个新的读取对象的请求,而之前的结果仍然缓存在浏览器中。
客户端发出此请求:
GET /pony.png HTTP/1.1
Host: server.com
Origin: field.com
If-None-Match: "etag-abcd"
现在,假设“etag-abcd”对该对象有效。服务器回复
HTTP/1.1 304 Not Modified
Etag: "etag-abcd"
Date: Tue, ...
Expires: Wed, ...
如果这是一个有效的跨域请求,服务器是否有义务提供适当的Access-Control-Allow-Origin 和其他标头?或者,客户端是否有义务尊重与原始缓存结果一起出现的 CORS 标头?
The Fetch standard 相当复杂,但它包含诸如“由于 CORS 检查不适用于状态为 304 或 407 的响应......”之类的短语,这让我怀疑新的 CORS 标头在304 响应。
另一方面,我阅读 §4.6,步骤 10.4,表明 304 响应中的标头优先,甚至替换原始 GET 响应标头中的任何缓存结果。
【问题讨论】: