假设客户端发出了读取对象的跨域请求,该请求通过了,客户端缓存了结果。现在,客户端发出读取对象的新请求,之前的结果仍然缓存在浏览器中。
客户端发出以下请求:
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相当复杂,但它包含类似于"As the CORS check is not be applied to be applied to response As status is 304 or 407...“这样的短语。这让我怀疑新的CORS头在304响应中是不必要的。
另一方面,我对§4.6,步骤10.4的阅读表明,304响应中的标头优先,甚至替换原始GET响应的标头中的任何缓存结果。
发布于 2021-05-28 13:29:08
是的,HTTP-network-or-cache fetch确实处理了304响应,但它最终返回了更新后的存储响应,在HTTP fetch中对该响应执行CORS检查。因此,对于典型的304,不需要CORS报头,因为它们已经存在于存储的响应中。
有一些边缘情况:
https://stackoverflow.com/questions/67730604
复制相似问题