现在我们有一些CORS请求(get,range header)
get http://example.com/01.mv (request a1)
get http://example.com/01.mv (request a2)
get http://example.com/02.mv (request b1)
get http://example.com/02.mv (request b2)
在发送请求a1之前,浏览器会发送OPTIONS请求,
我们可以在回复中找到Access-Control-Max-Age: 3600
。
这是我的问题:
在请求a2中,将发送OPTIONS请求吗?
请求b1中的是否会发送OPTIONS请求?
请求b2中的是否会发送OPTIONS请求?
答案 0 :(得分:2)
简短回答:浏览器每个网址都应用Access-Control-Max-Age
,而非每个来源。
在请求a2中,将发送OPTIONS请求吗?
不,因为该网址的Access-Control-Max-Age
标头,浏览器会缓存CORS预检的结果,但仅限于http://example.com/01.mv
网址。
请求b1中的是否会发送OPTIONS请求?
是的,因为它适用于不同的网址,http://example.com/02.mv
。
CORS协议通过每个URL进行预检而不是按来源进行操作,因此请求Access-Control-Max-Age
URL的其他a1
的值不适用于不同的{{1网址。
请求b2中的是否会发送OPTIONS请求?
不,出于同样的原因,它没有发送给请求b1
:由于a2
,浏览器会缓存Access-Control-Max-Age
的CORS预检结果。
就CORS规范定义相关要求而言,如果您跟踪规范中的步骤,它们将带您进入术语cache match的规范中的定义:
缓存匹配 对于请求如果来源是请求的来源, url是请求的当前网址...
换句话说,如果两者,则缓存的预检将仅用于请求: