跨域

126 阅读2分钟

同源策略

再说跨域之前,我们先来了解下什么是同源策略?

源=协议+域名+端口号。

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

我们可以通过window.origin或location.origin得到当前源。

https://www.a.com/a.js
https://www.a.com/b.js
//同一域名,同源

https://www.a.com:8000/a.js
https://www.a.com/b.js
//同一域名,不同端口,不同源

https://www.a.com/a.js
https://a.com/a.js
//同一域名,不同二级域名,不同源

同源策略就是不同源之间的页面,不准互相访问数据

什么是跨域呢?

跨域就是通过某些手段来绕过同源策略限制,实现不同服务器之间通信的效果

CORS 跨域

CORS全称“跨域资源共享”(Cross-Origin-Resource-Share)

CORS需要浏览器和服务器同时支持,才可以实现跨域请求,目前几乎所有浏览器都支持CORS,IE则不能低于IE10

CORS的整个过程都由浏览器自动完成,前端无需做任何设置,跟平时发送ajax请求并无差异。所以,实现CORS的关键在于服务器,只要服务器实现CORS接口,就可以实现跨域通信

CORS跨域分为两种请求,一种是简单请求,另外一种就是复杂请求。

简单请求

只要满足以下条件的就是简单请求:

  • 请求方式为GET、HEAD、POST
  • Content-Type的值仅限于以下三者之一:
      • application/x-www-form-urlencoded
      • multipart/form-data
      • text/plain

复杂请求

  • 请求方式为PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH
  • Content-Type的值不属于以下三者之一:
      • application/x-www-form-urlencoded
      • multipart/form-data
      • text/plain

JSONP跨域

我们在跨域的时候由于当前的浏览器不支持 CORS 或者因为某些条件不支持 CORS,我们必须使用另外一种方式来跨域,于是我们就请求一个 JS 文件,这个 JS 文件会执行一个回调,回调里面就有我们需要的数据