CORS预检不会持续发生

时间:2016-06-09 18:03:04

标签: cors

我看到CORS有些奇怪,我正在努力确认这是一个错误还是什么......

基本上,我有一个网站 www.example.com ,它会向 log.example.com 发出大量POST请求以进行日志记录。由于 log.example.com 是一个不同的域,因此CORS生效。

在大多数情况下,我会看到预检OPTIONS请求,然后是POST请求。但是,在某些情况下,我只看到POST,没有前面的选项 - 基本上,像这样:

OPTIONS
POST
...intervening requests to www...
OPTIONS
POST
POST
...intervening requests to www...
POST
...intervening requests to www...
OPTIONS
POST

没有OPTIONS请求返回Access-Control-Max-Age标头(它们可能应该这样,但这是另一回事),因此浏览器不应缓存OPTIONS响应。所有OPTIONS请求返回200并且所有POSTS返回202.有时会有干预请求,有时不会。所有OPTIONS请求都传递完全相同的标头,并且响应返回完全相同的Access-Control- *响应标头组合。 POST请求也是如此。

我没有(轻松)访问正在发出POST请求的JS(我的意思是,我可能找到它,但它被混淆了),但我不认为它应该有所不同 - 我很确定他们只是基本的'XHR要求。

fetch spec开始,如果未传递Access-Control-Max-Age,即使将条目添加到预检缓存,也应立即将其驱逐。或者可能是因为第二个POST发生在第一个POST的一秒内(在OPTIONS请求之后),预检缓存中有一个未过期的条目?

1 个答案:

答案 0 :(得分:1)

并非所有POST请求都是预检(POST是CORS安全列表方法)。它取决于请求中包含的标头。因此,如果没有任何标头超出CORS安全的请求标头范围,您将无法获得预检。