跨域访问的解决方法
2016-11-28 本文已影响0人
wyude
-
跨域访问是什么,百度一下你就知道。
-
什么情况下能确定遇到跨域问题了呢?
是使用js向服务起发送的请求
没有返回结果,F12后发现错误信息包含这个:
XMLHttpRequest cannot load http://……. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://……' is therefore not allowed access.
服务器控制台,发送的请求是get或者post,但显示的是options。为什么变了呢?通过OPTIONS请求握手一次的方式实现跨根域发送请求,就是先用它了试试能请求不。
因为懒,一直想找最简单的办法,所以简单可行的主要有以下三个方法:
- 给响应添加
response.setHeader('Access-Control-Allow-Origin:*');
,这个最简单了。但是在公司的eclipse封装后的平台上,我们没找到这个应该放在哪里………… - Spring MVC 从4.2版本开始增加了对CORS的支持,可以使用@CrossOrigin注解进行细粒度的配置。同理,不知道用在哪里……
- Tomcat下的配置,这个相比上两个要单独下载jar文件,但是更容易操作了。
下载cors-filter-1.7.jar,Java-property-utils-1.9.jar这两个库文件,放到lib目录下。(可在http://search.maven.org上查询并下载。)工程项目中web.xml中的配置如下:
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>