我使用angular $ http调用跨doamin REST Web服务(Spring)。请在下面找到代码。
$http({
url: ' http://xxx.yyy.zzz:8080/..../sponsors',
method: 'GET',
headers: { 'Token' : 'abc' }
}).success(function(sponsors){
$scope.sponsorList = sponsors;
}).error(function(sponsors){
alert('failed to get sponsors')
});
我收到以下错误
“对预检请求的响应未通过访问控制检查:请求的资源上没有'Access-Control-Allow-Origin'标头。”
在Tomcat-8上部署了Restful Web服务。
我在tomcat / conf / web.xml中添加了一个CORS过滤器,如下所示。
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
即使我收到同样的错误。
有人可以帮我解决这个问题吗?我错过了客户端的任何标题吗?还有什么需要在服务器端完成吗?
提前致谢
答案 0 :(得分:1)
这可以根据此link
为您提供帮助<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
答案 1 :(得分:0)
也许这个流程图可以帮助您了解会发生什么:http://tomcat.apache.org/tomcat-7.0-doc/images/cors-flowchart.png。
您能否向我们提供已发送OPTIONS
请求的内容(请求和响应内容)?您可以通过Chrome开发工具的网络标签访问此内容...
答案 2 :(得分:0)
我找到了根本原因。
我在同一台服务器上创建了简单的hello world REST服务而无需身份验证,并调用了该服务。
我没有任何问题得到了答复。
我在现有的具有认证的生产应用程序中遇到以下错误 否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。响应具有HTTP状态代码401
所以我得出结论,PREFLIGHT请求也需要身份验证。
有人能告诉我如何在PREFLIGHT请求中发送身份验证标头吗? 我们是否可以控制PREFLIGHT请求?