前端网络——跨域
一、什么是跨域
1、跨域是指浏览器不能执行其他网站脚本,它是由浏览器同源策略造成的,是js的安全机制。
2、我们知道,页面本身由协议、域名、端口号等组成,例如:https://www.baidu.com:80。只要协议、域名和端口号三者中有任意一个不同,就算跨域。
跨域发生在哪里?
跨域行为发生在浏览器。
=过程=
在一次请求数据的过程中:
即使发生了跨域,请求亦可以发出;
服务器端可以接收、正常处理并正常返回;
数据返回后,浏览器可以接受到数据;
接收数据后,浏览器发现当前页面的域同请求的域不同,判定为跨域。
代码在等待结果,但是浏览器判定跨域,不会把结果传给代码。
=结束=
虽然发生了跨域,但是确实需要所请求的数据,怎么办呢?
二、解决跨域问题
(一)后端配合进行跨域
1、JSONP方法(本次只使用这个方法解决)
2、后端设置Access-Control-Allow-Origin属性以支持跨域
(二)后端不配合进行跨域
1、iframe方式(但只能显示、不能控制)
2、通过自己的后端代理
三、代码
1、原生js发送ajax
<script>
var oDiv=document.getElementById('test');
var xhr=null;//创建一个http请求的对象
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();//常用浏览器带的
}else{
xhr=new ActiveXObject("Microsoft.XMLHTTP");//支持IE6
}
xhr.open("get","url");
xhr.onreadystatechange=function(){
//status==200 网络请求,结果都会有一个状态码,来表示这个请求是否正常,2××标识成功,3××标识重定向,4××表示客户端错误,5××表示服务端错误
if(xhr