CORS Access-Control-Max-Age适用于同一个来源或同一个请求网址

时间:2017-02-09 08:37:08

标签: google-chrome http browser cors

现在我们有一些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请求?

1 个答案:

答案 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是请求的当前网址...

换句话说,如果两者,则缓存的预检将仅用于请求:

  1. 请求的来源与该缓存预检的原点匹配
  2. 请求的网址与该缓存预检的网址相匹配