为啥我需要在 tomcat 应用程序上启用 CORS
Posted
技术标签:
【中文标题】为啥我需要在 tomcat 应用程序上启用 CORS【英文标题】:Why do I need to enable CORS on the tomcat application为什么我需要在 tomcat 应用程序上启用 CORS 【发布时间】:2015-11-23 17:52:19 【问题描述】:我有一个在 tomcat 8 服务器上运行的应用程序,在域上 和一个 Angular 网络应用程序。 web 应用使用 tomcat 应用,但是在 web.xml 中不启用过滤,webapp 会提到问题。
这是我向 tomcat 应用程序发出 js 请求的方式
function getResources($http, url)
return $http(
method: 'GET',
url: url,
headers: 'Accept': 'application/json'
).then(function (result)
return result.data;
);
;
我也尝试过:dataType: 'jsonp'
错误看起来像:
XMLHttpRequest cannot load http://localhost:8080/APP/requestStuff.No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access.
这对我来说很奇怪,因为如果原点与我连接的位置相同,则它不应该是交叉原点。
【问题讨论】:
【参考方案1】:只要方案(例如 http 与 https)、域或端口发生变化,跨源请求策略就会应用。因此,在您的情况下,由于端口不同,您将需要 CORS。
【讨论】:
【参考方案2】:尝试给它一个相对 url 而不是规范的。
这些站点还需要共享相同的端口。 https://en.wikipedia.org/wiki/Same_origin_policy#Origin_determination_rules
另外,请确保您获取的是正确的 URL。例如,如果您将错误引用为“Origin 'the_IP_of_web_app'”,则它会失败,因为那不是 IP 地址。
【讨论】:
我不想透露确切的 IP,但是在 localhost 上运行会遇到与我更改问题相同的问题。 在您的新问题中,您使用不同的端口。那将失败。 我在 8000 端口运行 python simpleHTTPserver,网页肯定会出现。只是请求会导致错误。 但是您尝试从显示托管在端口 8080 上的应用程序的浏览器连接到它?如果是这样,那就是问题所在,需要设置 CORS。我还会在多个浏览器中对其进行测试,因为它们的严格程度往往会有所不同。以上是关于为啥我需要在 tomcat 应用程序上启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat apache 8 服务器(端口 - 8080)上的 Pentaho API 在通过不同的 Web 应用程序调用时会出现 COR 问题(反应 JS,端口 - 3000)