我的cordova应用程序使用backbone.js与我的服务器进行通信。由于该应用程序显然不在与我的API相同的域下运行,因此每个非平凡的ajax请求都是在OPTIONS运行前发送的。我明白为什么会那样做。但是,我可以完全控制自己的服务器!我确切地知道,支持哪些http方法和标头。因此,OPTIONS请求是不是浪费时间?我该如何禁用它?
答案 0 :(得分:2)
你说你知道它提出请求的原因,但是为没有MDN describes the conditions that you'll get a preflighted request的人提供了一些背景信息。
不,你不能禁用它。
作为客户端代码的作者,您知道要做出哪些请求。
作为服务器端代码的作者,您知道要接受哪些请求。
作为编写用户浏览器的公司,Google(或Mozilla,Opera等)并不知道您是两个网站的作者,并且您信任自己。他们不知道站点A要求浏览器向站点B发出的请求是无害的。
在CORS之前,作者只需担心防御可能由链接和表单启动的CSRF攻击。
然后是XHR,突然http://evil.example.com
上的JavaScript可以触发DELETE
http://victim.example.com
请求,withCredentials
完成启用top part
。如果服务器处理了这个,响应浏览器,然后浏览器告诉JS引擎没有Access-Control头,那将是非常糟糕的。内容已被删除。
所以你需要预检才能获得许可。
所以这不浪费时间。你无法禁用它。您只需在获得许可的情况下回复即可。