【问题标题】:Cross-domain $http request with AngularJSAngularJS 的跨域 $http 请求
【发布时间】:2014-02-13 21:55:42
【问题描述】:

我在我的主操作系统(Windows7 Pro)上运行了一个 Java 服务,我可以通过http://localhost:8080/... 的浏览器访问它。它返回有效的 JSON 响应。

我还有一个用angularjs 编写的SPA,它位于我的虚拟机上,我为它创建了一个虚拟主机(为了更舒适的访问)。虚拟机操作系统为 Ubuntu Server 12.04.X LTS。

由于这些环境在网络方面彼此分离,因此我试图通过我的本地计算机 IP 地址X.X.X.X:8080 访问 Java 服务(通过终端 ping 确实发送了响应)。由于正常的$http 使用不起作用,我尝试了此答案How to load a cross-domain JSON with $http in angularjs 1.0.8 as it does with 1.2.0 中建议的解决方案,但要么它太旧,要么有其他问题,但是当我尝试做同样的事情时它就不起作用。在控制台中,我只看到以下内容

XMLHttpRequest cannot load http://X.X.X.X:8080/library/api/books. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://dev.xxx' is therefore not allowed access.

【问题讨论】:

  • 您需要在您的 java 服务上启用跨源资源共享 (CORS)。
  • 尝试启用它,正如这里 cxf.apache.org/docs/jax-rs-cors.html 所解释的那样,但无论如何都没有帮助。
  • 确保您已将 CORS 拦截器添加到您的 jax-rs 服务器。如果您完全按照 Apache CXF 说明进行操作,CORS 就可以工作。

标签: java angularjs jetty embedded-jetty


【解决方案1】:

感谢大家的意见。不能说我的解决方案是否正确,但我得到了预期的结果。

我将在这里找到的信息 Filter requests for CORS 与这个问题的答案 Java / Jetty: How to Add Filter to Embedded Jetty 结合起来。我不知道如何添加一个过滤器,它会监听请求并相应地设置响应头。

希望该解决方案对可能遇到相同情况的人有所帮助。

【讨论】:

    猜你喜欢
    • 2014-04-28
    • 2014-03-29
    • 2015-07-25
    • 2016-04-25
    • 1970-01-01
    • 2012-08-20
    相关资源
    最近更新 更多