浏览器对 XMLHttpRequest
对象的 HTTP 请求,是有范围限制的,这项规定被称为 同源策略
。总共有 3条
限制。
1. 域名相同
在 www.jmjc.tech 的页面下请求 jmjc.tech 服务器的内容,是不允许的。
2. 协议相同
https 和 http 也是两个不同的范围区域。
3. 端口相同
默认是 80 端口。
由于浏览器为了安全规定了 同源策略
,绕过同源策略的限制,通常有以下几种办法。
1. flash
2. 在同源域名假设一个代理服务器
3. cors
4. jsonp
CORS 是一种 白名单机制
,CORS 的请求成功与否取决于服务器是否同意当前域的请求,通过在服务器设置允许当前域名请求做到 跨域访问
。
在服务器的响应头部标示 Access-Control-Allow-Origin:当前域名 or * 。
JSONP 的跨域访问是利用了 script
文件的加载,所有只能支持 GET请求
,返回过来的是一个 JavaScript 文件
。
<!-- 通过 script 能跨域加载 javascript 脚本的这一特性 -->
<script src="http://xxx.com?xxx"></script>
<!-- 假设 http://xxx.com?xxx 加载的内容 -->
<script>
function f() {
return 'date' // 返回一个我们需要的数据
}
</script>
<!-- 使用数据 -->
<script>
f() // 'date'
</script>