而W3C的官方文档目前还是工作草案,但是正在朝着W3C推荐的方向前进。
简言之,CORS就是为了让AJAX可以实现可控的跨域访问而生的。
jsonp只支持get形式的访问,cors支持get,post等多种形式!
Tomcat服务器下使用cors跨域必须:
下载cors-filter-1.7.jar,java-property-utils-1.9.jar这两个库文件,放到tomcat的lib目录下和cors2的lib目录下
下面是我想使用跨域的两个网站:
cors项目的ajax请求:
<!DOCTYPE html> <html> <head> <Meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="jquery-1.4.2.js"></script> <script> function go() { $.get("http://localhost:8080/cors2/user/login?id=1&timeStamp="+new Date().getTime(),function(data) { alert(data); }); } </script> </head> <body> cors <input type="button" value="提交" id="submit" onclick="go()"/> </body> </html>
cors项目想访问cors2项目
cors2项目的web.xml配置中配置如下filter:
<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>
主要就是access-control-allow-origin请求头的拦截设置。
cors2的spring mvc的controller:
@Controller @RequestMapping(value = "/user") public class UserController { @RequestMapping(value = "/login",method = RequestMethod.GET) @ResponseBody public String toLoginUi(int id) { System.out.println(id + ":cors跨域成功!"); return "success"; } }
现在在:http://localhost:8080/cors/cors.html下通过ajax访问cors2的:http://localhost:8080/cors2/user/login
结果如下:
1:cors跨域成功!
说明跨域已可访问!