1.我们的jsonp技术确实是可以进行跨域请求,但是有一个弊端就是只能是get发送的请求,因为jsonp的底层原理是利用标签去发生请求,如果想要发送一些大规模的数据的话就必须要用到post方式,那post方式怎么可以实现跨域请求的呢!!
2.我们只需要在服务端设置一个响应头即可:
header('Access-Control-Allow-Origin:请求源域名或者*');
意思就是当前服务器允许跨域请求,设置这个之后,就不存在跨域了,直接用ajax就能发送请求接受数据
原理过程:
客户端在发生请求之前会根据同源策略看是否是跨域请求,如果是同源,则直接发送真正的请求,但如果不是同源,浏览器会预先发送一条跨域请求(浏览器自身内部发送的),服务器接受到了跨域请求之后,会返回自身内部设置的响应头,如果没有设置header('Access-Control-Allow-Origin:请求源域名或者*'); 则浏览器判断为服务端不允许跨域请求,则不发送真实的ajax请求,但如果服务端设置了,那么浏览器会认为服务器允许接受跨域请求,(同源),再发生真正的ajax请求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.open('get','http://www.studyit.com/views/test.php',true);
xhr.send(null);
xhr.onreadystatechange = function () {
if(xhr.readyState == 4 && xhr.status == 200) {
var data = xhr.responseText;
console.log(data);
}
}
</script>
</body>
</html>
在PHP文本中书写
<?php
header('Access-Control-Allow-Origin:http://www.study.com');
echo 'hello';
?>
http://www.study.com也可以书写其他地址,表示可以跨域的页面,*号表示所有的页面都可以跨域
网友评论