1. 同源
同源策略是指在web浏览器中,允许某个网页脚本访问另一个网页的数据,但前提是这两个网页必需有相同的URI、主机名和端口号,一旦两个网站满足了上述条件,这两个网站就被认定为具有相同来源。
此策略可防止某个网页上的恶意脚本通过该页面的文档对象模型访问另一网页上的敏感数据(保护用户隐私)。
2. 跨域
跨域就是指跨域名的访问。以下情况均属于跨域:
- 域名不同,如www.jd.com 和 www.taobao.com
- 域名相同,但端口号不同,如www.jd.com:8080和www.jd.com:8081
- 二级域名不同,如 miaosha.jd.com 和 red.jd.com
常用的跨域方式有 JSONP 跨域和 CORS 跨域
3. CORS
CORS:全称跨源资源共享(Cross-origin resource sharing)。
对于简单请求,浏览器直接发出CORS请求。具体来说,就是在头信息之中,增加一个 Origin 字段用来说明,本次请求来自哪个源(协议 + 域名 + 端口)。服务器根据这个值,决定是否同意这次请求。如果服务器允许跨域,需要在返回的响应头中携带下面信息: Access-Control-Allow-Origin:可接受的域,是一个具体域名或者*,代表任意
4. JSONP
JSONP((JSON with Padding))
在跨域的时候,由于当前浏览器不支持或因某些原因不支持 CORS,于是需要使用其他方式来跨域。
JSONP 跨域就是请求一个 JS 文件,它会执行一个回调,回调里会有我们需要的数据。
把回调的名字(可以是随机生成的一个数字)以 callback 的形式传给后台,后台会把函数返回并执行。
JSONP 的优点:
- 兼容IE
- 可以跨域
JSONP 的缺点:
- 它是一个 script 标签,只能发 GET 请求,不支持 POST。
- 不能像 AJAX 那样读取到很精确的状态,不知道状态码或响应头是什么,只能知道成功或失败。