跨域请求被阻止 - 这可以通过启用 CORS 来解决

Posted

技术标签:

【中文标题】跨域请求被阻止 - 这可以通过启用 CORS 来解决【英文标题】:Cross-Origin Request Blocked - This can be fixed by enabling CORS 【发布时间】:2014-09-06 16:52:04 【问题描述】:

我正在尝试在我的 AngularJS 应用程序中向 rotten tomatoes API 发出一个简单的 http GET 请求,但是当我运行它时,我在浏览器控制台中得到了这个:

跨域请求被阻止:同源策略不允许读取 远程资源在 http://api.rottentomatoes.com/api/public/v1.0/movies/770672122.json?apikey=[myApiKey]。 这可以通过将资源移动到同一域或 启用 CORS。

注意:“[myApiKey]”已替换为我的实际密钥...

我已经在 Chrome 和 Firefox 上试过了,虽然我知道在启动 Chrome 时可以附加一些参数来禁用它,但普通用户不知道如何做到这一点,所以从浏览器兼容性来看选项对我不起作用。我还尝试从我的桌面以及本地 Tomcat 实例运行我的应用程序。

所以我发现这可以通过启用 CORS 来解决。现在我该怎么做?显然我不能接触烂番茄服务器,所以这必须从我这边 - 客户端来完成。

【问题讨论】:

需要在服务器上启用CORS。您可能需要为此 API 编写一些代理。 根据这个帖子developer.rottentomatoes.com/forum/read/129615 有人已经请求了这个功能......但他们似乎没有回应这个请求。 从服务器端调用api并从您的客户端访问服务器端 所以基本上就目前而言,没有人可以为烂番茄 API 创建 Angular 客户端?他们已经 3 年没有响应功能请求了,我猜他们永远不会启用 CORS。 看看能不能发出 JSONP 请求 ***.com/questions/19916362/… 。 API 必须支持这种情况发生 【参考方案1】:

您需要enable CORS on the server-side code by setting the Access-Control-Allow-Origin HTTP 或changing the web.config。

【讨论】:

【参考方案2】:

您需要向 rottentomatoes API 发出 JSONP 请求,而不是普通的 JSON

【讨论】:

以上是关于跨域请求被阻止 - 这可以通过启用 CORS 来解决的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 跨域请求被阻止

跨域请求被阻止原因:CORS 预检通道未成功

跨域请求被阻止:CORS 标头“Access-Control-Allow-Origin”缺失

跨域请求被阻止:(原因:缺少 CORS 标头“Access-Control-Allow-Origin”)

跨域请求被阻止:& 原因:缺少 CORS 标头“Access-Control-Allow-Origin”

android 应用程序中的 CORS 原始请求被阻止