【问题标题】:Http Option Method with Javascript request带有 Javascript 请求的 Http 选项方法
【发布时间】:2012-01-10 15:52:30
【问题描述】:

我使用backbone.js 的模型。当我保存模型时,它会在 Firefox 上向服务器端发送 HTTP OPTIONS 方法,但会通过 safari 发送 HTTP POST 方法。

我知道这不是关于主干.js 的问题,而是关于 CORS。我只会检查服务器端的方法、GET、POST、PUT 和 DELETE,我不会使用 HTTP OPTIONS 方法。

我请求的 url 是我的 api:api.foo.com 和从 bar.com 请求的 api

那么,我如何在所有浏览器中控制使用 HTTP POST 而不是 OPTIONS 请求我的 api.foo.com? 以及如何与来自任何其他域的所有请求共享 api.foo.com 的内容?

注意:我已经将响应的标头从服务器端更改为:Access-Control-Allow-Origin: *

【问题讨论】:

    标签: http http-post cors http-options-method


    【解决方案1】:

    OPTIONS 请求实际上就是所谓的preflight request of the CORS specification。 Web 浏览器使用此预检请求来检查服务器在什么条件下会接受来自相应来源的请求。如果对预检请求的响应令人满意,浏览器将发送实际请求。

    所以要遵守这个规范,你需要你的服务器重现steps of preflight request processing

    【讨论】:

    • 那么,我如何设置浏览器不检查服务器在什么条件下会接受请求?它会在每个发布请求之前检查吗?因为,我希望每个执行我的 javascript 的浏览器都将 POST 方法发送到我的服务器端脚本
    • @davit 你不能。由于安全原因 (CSRF),无法使用 original XHR 进行跨域请求。 XHR level 2 使之成为可能,但要求遵守 CORS 规范。
    • @davit 尽管 GET 被称为 simple method,但 simple cross-origin request 只有在 force preflight flag 为 false 时才可能(即它不是 XMLHttpRequestUpload 请求)并且请求中除了simple header fields之外没有其他头字段。
    • 感谢您的信息,我会阅读您分享的所有页面。这些似乎有点复杂。我想问一下,最后一件事,你知道 Facebook 是如何使用他们的 javascript sdk 做到这一点的吗?
    • @davit 他们的服务器可能实现了预检请求处理指令。
    猜你喜欢
    • 2016-07-18
    • 2016-01-12
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2012-06-21
    • 2018-12-16
    • 1970-01-01
    相关资源
    最近更新 更多