【问题标题】:Why isn't Ember.js seeing the Access-Control-Allow-Origin header from my server?为什么 Ember.js 没有从我的服务器上看到 Access-Control-Allow-Origin 标头?
【发布时间】:2014-09-24 15:38:37
【问题描述】:

我的应用是一个 Ember.js 前端,服务器上有一个 Go API。我使用 FixtureAdapter 创建了 Ember 应用程序。现在我有了 Go API 后端,我将其转换为 RESTAdapter。

当我直接使用浏览器访问我的 API 时,我似乎得到了适当的 CORS 标头:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Origin,x-requested-with
Access-Control-Allow-Methods:PUT,PATCH,GET,POST
Access-Control-Allow-Origin:*
Access-Control-Expose-Headers:Content-Length

但是,当我的 Ember.js 应用程序访问 API 时,我得到 XMLHttpRequest cannot load https://192.168.59.103:8001/notifications. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.59.103:9000' is therefore not allowed access.

我不知道如何查看 Ember 和 API 之间发生的情况。我已经阅读了this CORS tutorial,并且在服务器端似乎一切正常。

我包含了关于 x-requested-with 的内容,因为另一个 Stack Overflow 问题表明 jQuery 请求需要与普通的旧 JavaScript 请求不同的东西。

【问题讨论】:

    标签: ember.js cors


    【解决方案1】:

    您的端点还需要使用 CORS 标头响应 OPTIONS 请求——这些请求将在实际请求之前执行,以确保首先允许该请求。

    【讨论】:

    • 有趣!好吧,我试了一下$ curl -v -k -X OPTIONS https://token:@localhost:8001/notifications。 CORS 标头通过,但返回的 HTTP 状态代码是 404。:-) 我想我需要解决这个问题。 (我想知道为什么原始 API 代码中没有处理 OPTIONS 请求。我是从0value.com/build-a-restful-API-with-Martini 的演示中获取的。)
    • 大多数 API 不响应 OPTIONS 请求,但这是最佳实践,也是 REST 适配器的要求。我通常设置一个通配符包罗万象的路由,它只返回我的 CORS 标头。
    【解决方案2】:

    您是否碰巧使用 Nginx 作为您的 API 的反向代理?如果是这样,我们遇到了同样的问题。在我们的例子中,问题是 Nginx 返回正确的 CORS 标头对于 HTTP 200 OK 响应很好,但是对于任何错误响应,它将无法添加 COR 标头,因此实际的服务器响应会被浏览器掩盖并抱怨它没有适当的 CORS 标头来呈现响应。

    https://serverfault.com/a/431580/199943

    即使您没有使用 Nginx,也请尝试直接调用您的 API(例如,使用 Postman 来避免 CORS 限制以查看它返回的内容。如果您的 API 返回的不是 HTTP 200 OK,那可能是为什么没有添加 CORS 标头。

    【讨论】:

    • 没有 Nginx。只需使用 Go 的 http。谢谢你的提示;我试过邮递员,但只得到 200 回。
    猜你喜欢
    • 2017-01-02
    • 2016-01-21
    • 1970-01-01
    • 2017-09-19
    • 2015-04-02
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多