跨域?

217 阅读1分钟

什么是同源

源 = 协议+域名+端口号

如果有两个url的协议、域名、端口号 ——完全一致,那么这两个url就是同源的

什么是跨域

当用户从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任何一个不同,都属于跨域

JSONP 跨域

JSONP我们在跨域的时候由于当前浏览器不支持cors (一般是需要兼容IE的可怜虫),我们必须使用另外一种方式跨域

于是我们请求一个js文件,这个js文件会执行一个回调,回调里面就有我们的数据,回调的名字可以随机生成,以callback当参数传给后台,后台会把这个函数再次返回给我们并执行

优点: 最大的优点是兼容ie,跨域

缺点:

  • 由于他是script标签,所以读不到ajax那么精确的状态码,也不知道响应头这些,只能用onload、onerror监听是成功了还是失败了。
  • 由于是script标签,只能发get请求,不支持post

CORS 跨域

浏览器默认不同源之间不能互相访问数据,(为了保护用户的隐私)

但如果此时就是要就是想要两个网站互相访问,那就需要CORS

怎么做?

只需要在被访问的资源,在响应头中写入你要允许的网站

Access-Control-Allow-Origin: foo.example

一句话完美解决

缺点:

就是不兼容ie,所以ie要用JSONP