我对前后端跨域的理解

跨域是浏览器出于安全的同源策略,简单来说:浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是属于跨域。

这里简单说一下,对域名、端口、协议的理解   

htttps://www.123.com:8080

 协议:好像目前协议分为http和https,https的安全性比http高

域名:www.123.com 域名就是紧跟协议之后的

端口号:8080,这里的端口号值的是逻辑端口,端口号的范围从0到65535,http常用的端口是80

解决跨域的方法有好几种,这里说到比较常用的几种

JSONP实现跨域(前端):

JSONP实现跨域请求的原理简单的说,就是动态创建<script>标签,然后利用<script>的src 不受同源策略约束来跨域获取数据。

其实就是利用了标签的src属性,有src的属性的常见标签有img、iframe、script,同样link标签的href属性也可以跨域,这里标签就自带了跨域的天赋。

前端html代码

<button onclick="get()">获取数据</button>
 <script type="text/javascript">
        function get(){
            var script = document.createElement("script");
            script.src = "http://vueapp.com/Api/Mess?jsoncallback=callbackFunction";
            document.body.insertBefore(script, document.body.firstChild);   
        }
        function callbackFunction(result){
            console.log(result)
        }
</script>

后端php代码

header('Content-type: application/json');
//获取回调函数名
 $jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);
//json数据
 $json_data = '["mycustomername1","ycustomername2"]';
//输出jsonp格式的数据
echo $jsoncallback . "(" . $json_data . ")";

jsonp只支持get请求而不支持post请求

JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据

CORS跨域(后端)

可参考我的另外一篇文章tp3.2 跨域解决 https://blog.csdn.net/magic_xiang/article/details/81775434

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)

相比JSONP,CORS支持所有类型的HTTP请求

所以一般来说处理跨域这个问题由后端处理比较好

猜你喜欢

转载自blog.csdn.net/magic_xiang/article/details/82255384