【问题标题】:CORS issues inconsistentCORS 问题不一致
【发布时间】:2013-08-22 05:14:08
【问题描述】:

好的,我正在使用 REST 控制台(Chrome 扩展)来测试一个 REST API。这些请求可与 REST 控制台一起使用,但在 javascript AJAX 中执行相同操作却失败了 Origin localhost:8000 is not allowed by Access-Control-Allow-Origin.

服务器设置为允许 *,我可以在 REST 控制台的响应标头中看到这一点。但是在 javascript 中执行 ajax 请求时查看我的响应标头,我发现这些标头不存在。

两者有什么区别?

这是我的简单 AJAX 请求(coffeescript)

$.ajax
    type: requestType
    contentType: "application/json"
    url: url
    data: data_string
    success: (r) =>
        successCallback(r)
    error: (r) =>
        errorCallback(r)

这在本地网络的办公室中有效,但现在在 VPN 上无效。但是 REST 控制台总是有效??

【问题讨论】:

    标签: javascript ajax coffeescript cors


    【解决方案1】:

    在简单的 CORS 请求中,Content-Type: 不允许使用application/json

    它必须进行预检,并且服务器端设置要复杂一些。

    如果合适,请尝试取消设置 contentType 或使用其中一种:

    • application/x-www-form-urlencoded
    • 多部分/表单数据
    • 文本/纯文本

    另见my previous answer here

    还有一个相关的问题:

    jQuery CORS Content-type OPTIONS

    【讨论】:

    • 谢谢你,这似乎没有任何区别。如果我把它拿出来,仍然会得到回应。还是应该是不同的内容类型?
    • 等等,现在似乎可以工作了。但是现在我测试的另一个开发人员离线了!大声笑
    • 服务器是否发送header Access-Control-Allow-Origin: * ?
    • 是的,但以前只适用于 REST 控制台应用程序,而不是 javascript AJAX 调用。我得等其他开发者回来
    • 查看我对预检项目的注释,我在代码中找不到 $.ajax 调用的变化,所以可能是一样的。但是,在服务器端,您需要处理 http OPTIONS 请求。另外,除非你真的需要,否则不要进行预检,它会发出两个请求,需要更多时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2014-10-23
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多