我写了一个在嵌入式tomcat服务器(端口:8080)上运行的spring boot MAVEN应用程序。我在端口8000上运行了另一个nodeJS express服务器。现在,从端口8000,我已代理端口8080.因此,任何地址“http://localhost:8080/ *”将带我到spring boot应用程序中的代码。我通过将断点保持在spring boot应用程序中的所需位置来测试它。
但是,在执行spring boot中的代码之后,我正在
XMLHttpRequest cannot load http://localhost:8080/users/?_=1468052674994. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access.
“/ users /”是我在spring boot app中的请求映射。
我只是知道我应该将8080端口“暴露”给主机。 https://www.wouterdanes.net/2014/04/11/continuous-integration-using-docker-maven-and-jenkins.html 上面的文章说docker可以做到这一点。从这开始我并不太了解。任何人都可以帮助我。
答案 0 :(得分:1)
浏览器使用XMLHttpRequest来创建Ajax请求。 为了防止滥用,浏览器使用“同源策略”#39;防止从不同位置加载资源作为导致请求的页面。 相同的IP,但具有不同的端口,在您的情况下,也被视为不同的位置'。
您可以使用加载请求的页面上的特殊标题来解决此问题。 这可能听起来非常复杂,但在
解释它是可以理解的Same-origin_policy 和 Cross-origin_resource_sharing
<强>解决方案强>
第一个响应,包含将生成XMLHttpRequest的页面, 必须包含标题:
Access-Control-Allow-Origin:http://localhost:8080
答案 1 :(得分:0)
Spring Rest API来救我。 @CrossOrigin(originins =“http://localhost:8000”)注释给控制器解决了问题。此代码在所有控制器中重复。仍然找到有效的解决方案。