什么是跨域?跨域请求资源的方式有哪些?


什么是跨域?跨域请求资源的方式有哪些?
1.什么是跨域?
由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意与当前页面地址不同就是跨域。存在跨域的情况
1.网络协议不同,如http协议访问https协议
2.端口不同,如80端口访问8080端口
3.域名不同,如qianduanblog.com访问百度.com
4.子域名不同,如abc.qianduanblog.com访问def.qianduanblog.com。域名和域名对应的ip,如www.a.com访问20.205.28.90
2.跨域请求资源的方式
1.proxy代理
定义和用法:proxy代理用于将请求发送给后台服务器,通过服务器来发送请求,然后将请求的结果传递给前段
实现方法:通过nginx代理
注意点:如果代理的是http协议的请求,那么proxy首先需要信任该证书(尤其是自定义证书)或者忽略证书检查,否则你的请求无法成功
2.CORS(Cross-Origin Resource Sharing)
定义和用法:是现代浏览器支持跨域资源请求的一种最常用的方式
使用方法:一般需要后端人员在处理请求数据的时候,添加允许跨域的相关操作。如下:
res.write(200,{
"Content-Type":"text/html;charset=UTF-8",
"Access-Control-Allow-Origin":"http://localhost",
"Access-Control-Allow-Methods":"GET,POST,OPTIONS",
"Access-Control-Allow-Headers":"X-Requested-With,Content-Type"
});
3.jsonp
定义看和用法:通过动态插入一个script标签。浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行(没有阻塞的情况下)
特点:通过情况下,同通过动态的创建script来读取它域的动态资源,获取的数据格式一般为json格式
实例如下:
<script>
<function testjsonp(data){
console.log(data.name);//获取返回的结果
}
</script>
<script>
var _script=document.createElement('script');
_script.type="text/JavaScript";
_script.src="http://localhost:8080/jsonp?callback=testjsonp";
document.head.appendChild(_script);
</script>
缺点:
1.这种方式无法发送post请求
2.另外要确定jsonp的请求是否失败并不容易,大多数框架的实现都是结合超时时间来判定的

原文地址:https://www.cnblogs.com/juddy/p/14178416.html