【问题标题】:API request status 200 not accessableAPI 请求状态 200 不可​​访问
【发布时间】:2017-11-20 12:42:53
【问题描述】:

我遇到了一个奇怪的问题。我有一个在端口 8080 上运行的 java spring 应用程序和在端口 3000 上运行的 Angular 应用程序。在发出请求时返回 status 200 并且可以在浏览器网络选项卡中找到响应,但控制台抛出错误 XMLHttpRequest 无法加载 'http://localhost:8080/apiname'。请求的资源上不存在“Access-Control-Allow-Origin”标头。 origin 'http://localhost:3000/#/home' 因此不允许访问。有什么方法可以在不对服务器端进行任何更改的情况下使其正常工作。任何帮助表示赞赏

【问题讨论】:

  • 没有。未经服务器允许,您无法发出跨域请求。
  • 我也可以使用 curl 或 POSTman,如果服务器不允许请求预览也不应该出现对吗? @smarx
  • 不,这不是 CORS 的工作方式。 CORS 是浏览器实现的限制。它不会允许你的 JavaScript 代码访问响应,除非服务器发送适当的标头允许它。

标签: javascript java angularjs http-headers xmlhttprequest


【解决方案1】:

听起来您的机器上有一个服务试图与另一个服务通信,无论出于何种原因,它们都无法识别为在同一个域中。通常,您必须为不在同一环境中的域添加跨域策略。

Access-Control-Allow-Origin 标头是一种 CORS 标准,用于指示谁可以通过跨域策略发送通信。

您只能在端口 80 上托管一个网站,而拥有两个网站就没有意义了。一个 SSL(443) 和一个 HTTP(80) 所以这可能是它生效的原因,是因为你的端口。

对于简单的答案,将标头添加到您的服务器端响应中,并确保将该域和端口添加到您的跨域策略中。

我还鼓励您尝试了解为什么必须执行这些通信。您可以将这两种服务放在一个站点中并消除需求。对于非服务器更改,这是您最简单的答案。

否则,您将不得不添加它。这是一个安全协议。有一些步骤可以删除它,但这会使您面临无数安全漏洞。

使用以下链接阅读更多内容,您可以使用 * 而不是禁用其他方法。

https://enable-cors.org/server.html

Access-Control-Allow-Origin: *

以上标头将允许所有跨域策略,在服务器端实现。

【讨论】:

    【解决方案2】:

    你可以通过添加扩展在firebox中启用它

    https://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors/

    【讨论】:

      【解决方案3】:

      您必须在服务器端启用 CORS 标头或使用代理(自己的,或用于开发目的的 a simple service like crossorigin.me)来提供正确的 CORS 标头。

      要在 Express.js 应用程序中启用 CORS,请参阅 cors middleware - 对于简单的用例,一行代码就足够了 - app.use(cors())

      对于桌面或应用内使用,如果您愿意,可以忽略 CORS 标头,因为您可以更好地控制 HTTP 客户端。

      【讨论】:

        猜你喜欢
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 2022-01-08
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多