java跨域的含义
在说跨域之前,首先要了解一下same-origin policy,即同源策略。
same-origin policy简单的说,浏览器中访问的A网站中不能访问B网站中的数据,除非A,B网站是同源的,即对应的协议、域名、端口完全相同。否则是从不同origin得来的,不允许被访问。
这就产生了跨域的问题,浏览器拦截了服务器端返回的相应,而不是浏览器拦截了请求,想要能够跨域访问,需要浏览器和服务器同时支持跨域。
1.JSONP
通过在文档中嵌入一个script标记来从另一个域中返回数据。例如在页面中添加一个如下的script标记:
<script src="http://blog.ambergarden.com/someData?callback=some_func"/>
该标记会向http://blog.ambergarden.com/someData发送一个GET请求。在数据返回到客户端后,some_func()函数将会被调用。
该方法的缺点就是:
1.只支持Get,不支持Post;
2.本质上是脚本注入的方式,存在安全隐患;
2.CORS(跨域资源共享):
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
CORS需要浏览器和服务器同时支持。它的通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。