ajax之cors跨域

来源:互联网 发布:知乎 美国富人加税 编辑:程序博客网 时间:2024/06/06 00:10
跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。而这种访问是被同源策略所禁止的。CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。 它是一个妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。
而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)@ResponseBodypublic 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跨域成功!

说明跨域已可访问!


0 0