cors跨域(以及和jsonp的区别)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33562825/article/details/60780480

上次我们说到,jsonp只支持get方式跨域,不支持post,是因为底层是使用script标签去接受请求,jsonp通过给script的src中的url设置回调函数,传给服务端后,服务端返回一个回调函数的调用,把数据包在这个回调函数里面,然后我们在全局中定义一下这个回调函数准备解析数据就好了。如果对jsonp和跨域还不是很了解的话,请看我的另一篇文章http://blog.csdn.net/qq_33562825/article/details/60765688

现在假设我要跨域,同时跨域的时候传递的数据非常多,get对数据大小又有限制,用get就不靠谱,必须使用支持post跨域的。

 之前都是假如我们的网站aa,现在想请求一个叫bb的网站,用的是jsonp的方式,aa通过script标签告诉bb我要跨域,bb说你必须有令牌,然后aa亮出了令牌jsonp,bb看了以后就把资源给aa了

而现在我们需要的这种跨域方式,是支持get以及post跨域的,与jsonp不同的是,它不是直接发请求给要进行跨域的网站,而是先经过服务器,通过服务器的处理后,才能实现的跨域。这种方式叫做—-CORS.

CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

在php中,通过下面代码给客户端设置一个响应头,浏览器响应时就会知道允许跨域了

  header( 'Access-Control-Allow-Origin:*' )//允许所有网站跨域访问该网站


 header( 'Access-Control-Allow-Origin:http://baidu.com' )//只允许百度跨域访问该网站

jsonp方式和cors方式的区别

  • jsonp是jquery提供的跨域方式
  • cors是w3c提供的一个跨域标准
    ——————————————————————
  • jsonp只支持get方式的跨域
  • cors支持get和post方式的跨域
    ——————————————————————
  • jsonp支持所有的浏览器(因为所有浏览器都可以使用script标签发送请求)
  • cors不支持IE10以下的浏览器
展开阅读全文

没有更多推荐了,返回首页