web是如何實現跨域的

跨域是指從一個域名的網頁去請求另一個域名的資源。比如從www.baidu.com 頁面去請求 www.google.com 的資源。跨域的嚴格一點的定義是:只要 協議,域名,端口有任何一個的不同,就被當作是跨域
瀏覽器有同源策略本身是禁止跨域訪問的
爲什麼瀏覽器要限制跨域訪問呢?原因就是安全問題:如果一個網頁可以隨意地訪問另外一個網站的資源,那麼就有可能在客戶完全不知情的情況下出現cookie泄露的安全問題
爲什麼要跨域:
既然有安全問題,那爲什麼又要跨域呢? 有時公司內部有多個不同的子域,比如一個是location.company.com ,而應用是放在app.company.com , 這時想從 app.company.com去訪問 location.company.com 的資源就屬於跨域

怎麼實現跨域:
由於瀏覽器一般不對script,img等進行跨域限制,所以我們有機會通過script的方式來實現跨域訪問。
簡單來說,就是你請求的文件,只要含有“src”,“href”這些屬性,你就能在其他服務器上,請求你所需要的文件,然後在自己的服務器上運行,就實現了跨域(跨協議,跨域名,跨端口)。
凡是擁有scr這個屬性的標籤都可以跨域例如<script><img><iframe>,herf屬性的有<a>
具體做法:
1. 基於script標籤實現跨域,在頭部寫請求的資源地址:
<script type="text/javascript" src="http://web.cn/js/message.js"></script> 返回的是json數據
2. 基於jQuery發送Ajax,在Ajax裏面設置datatype爲jsonp(服務器返回的數據格式),則可以進行跨域訪問,不過Ajax中type必須是get,因爲jsonp只支持get
3.還有ifram請求
基於iframe實現的跨域要求兩個域具有aa.xx.com,bb.xx.com 這種特點,例如:http://a.study.cn/a.html 請求 http://b.study.cn/b.html
也就是兩個頁面必須屬於一個基礎域(例如都是xxx.com),使用同一協議和同一端口,這樣在兩個頁面中同時添加document.domain,就可以實現父頁面調用子頁面的函數

實現跨域的話服務端需要做什麼:
服務端要檢查訪問的請求參數,如果沒有callback,則可以按照之前的流程走;如果帶着callback參數,則需要將返回的結果包裝在callback裏面。

1、jsonp跨域 
JSONP(JSON with Padding:填充式JSON),應用JSON的一種新方法, 
JSON、JSONP的區別: 
 1、JSON返回的是一串數據、JSONP返回的是腳本代碼(包含一個函數調用) 
 2、JSONP 只支持get請求、不支持post請求 
 (類似往頁面添加一個script標籤,通過src屬性去觸發對指定地址的請求,故只能是Get請求)

參考鏈接:
https://blog.csdn.net/echizao1839/article/details/80815155
https://blog.csdn.net/tjcjava/article/details/76468225
https://blog.csdn.net/qq_15037231/article/details/80364647

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章