美文网首页
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