【问题标题】:How can I prevent Backbone.js from sending OPTIONS request?如何防止 Backbone.js 发送 OPTIONS 请求?
【发布时间】:2016-04-17 06:22:06
【问题描述】:
我的cordova 应用程序使用backbone.js 与我的服务器通信。由于该应用程序显然没有在与我的 API 相同的域下运行,因此每个重要的 ajax 请求都通过 OPTIONS 飞行前发送。我明白为什么会这样。但是,我可以完全控制自己的服务器!我确切地知道,支持哪些 http 方法和标头。因此,OPTIONS 请求不是浪费时间吗?如何禁用它?
【问题讨论】:
标签:
javascript
cordova
http
backbone.js
cors
【解决方案1】:
你说你知道它为什么提出请求,但是为那些不知道的人提供一些上下文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。如果服务器处理了它,响应浏览器,然后浏览器告诉 JS 引擎没有 Access-Control 标头,那将是非常糟糕的。内容已被删除。
所以你需要预检才能获得许可。
所以这不是浪费时间。你不能禁用它。您只需在获得许可的情况下回复即可。