美文网首页
Cors跨站资源共享一解决跨域问题

Cors跨站资源共享一解决跨域问题

作者: pingping_log | 来源:发表于2017-09-20 17:15 被阅读0次

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也可以书写其他地址,表示可以跨域的页面,*号表示所有的页面都可以跨域

相关文章

网友评论

      本文标题:Cors跨站资源共享一解决跨域问题

      本文链接:https://www.haomeiwen.com/subject/bgvosxtx.html