cors / ajax 请求的重复 OPTIONS 请求

Posted

技术标签:

【中文标题】cors / ajax 请求的重复 OPTIONS 请求【英文标题】:Repeated OPTIONS requests for cors / ajax requests 【发布时间】:2015-03-01 00:28:52 【问题描述】:

在我的网站上,我有一个自动建议的文本输入,它会在用户键入时建议结果。结果由对不同域上的 API 的 AJAX 调用提供。这意味着我必须使用 CORS 来允许请求。

一切运行良好,但每次用户输入一个新字符时,浏览器都会发送一个新的 OPTIONS 请求以确保它被授权。

有没有办法绕过所有这些重复的选项请求?

我的接收请求的 php 脚本有

header("Access-Control-Allow-Origin: http://consent.example.com");

所有请求都来自consent.example.com。需要明确的是,授权工作正常,请求成功完成,但我不知道为什么它需要继续进行选项调用。对我来说,浏览器会缓存它是有意义的。

【问题讨论】:

【参考方案1】:

根据RFC 2616 ("Hypertext Transfer Protocol -- HTTP/1.1"),第 9.2 节:

9.2 选项

...

对此方法的响应不可缓存。

HTTP 规范明确禁止缓存 OPTIONS 响应。

值得注意的是,GET 响应也不使用缓存(我看到 customers?search=alex 每次都是 200)。这仅仅是因为服务器选择不为该请求发送 304 响应,或者您的浏览器没有通过 If-Modified-SinceIf-None-Match 请求标头让服务器知道它有缓存副本。

【讨论】:

以上是关于cors / ajax 请求的重复 OPTIONS 请求的主要内容,如果未能解决你的问题,请参考以下文章

OPTIONS 方法在跨域请求(CORS)中的应用

CORS 中的POST and OPTIONS 请求

POST AJAX 请求被拒绝 - CORS?

CORS 中的POST and OPTIONS 请求

使用 CORS 的 OPTIONS 请求宁静的跨域

客户端ajax请求为实现Token验证添加headers后导致正常请求变为options跨域请求解决方法