相信很多人都聽過跨域,但很多人都不知道跨域是什麼意思,那麼,接下來我們來講解一下什麼是跨域,以及怎麼解決。
一:什麼是跨域
跨網域,是指瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實作的安全性限制。瀏覽器從一個網域的網頁去要求另一個網域的資源時,出現網域名稱、連接埠、協定任一不同,都屬於跨網域。
二:跨域怎麼解決
1、jsonp跨域
JSONP(JSON with Padding:填充式JSON),應用JSON的一種新方法,
JSON、JSONP的差別:
1、JSON回傳的是一串資料、JSONP回傳的是腳本程式碼(包含一個函數呼叫)
# 2、JSONP 只支援get請求、不支援post請求
(類似往頁面新增一個script標籤,透過src屬性去觸發指定位址的請求,故只能是Get請求)
2、nginx反向代理:
www.baidu.com/index.html需要呼叫www.sina.com/server.php,可以寫一個介面www.baidu.com/server.php,由這個介面在後端去呼叫www.sina.com/server.php並且拿到回傳值,然後再回傳到index.html
3、PHP端修改header
header(' Access-Control-Allow-Origin:*');//允許所有來源存取
header('Access-Control-Allow-Method:POST,GET');//允許存取的方式
4、document.domain
跨域分為兩種,一種xhr不能存取不同來源的文檔,另一種是不同window之間不能進行交互操作;
document.domain主要是解決第二種情況,只能適用於主域相同子域不同的情況;
document.domain的設定是有限制的,我們只能把document.domain設定成自身或更高一級的父域,且主域必須相同。例如:a.b.example.com中某個文件的document.domain可以設成a.b.example.com、b.example.com 、example.com中的任一個,但是不可以設成c.a.b.example.com,因為這是當前域的子域,也不可以設成baidu.com,因為主域已經不相同了。
5、window.name 關鍵點:window.name在頁面的生命週期里共享一個window.name;
相容性:所有瀏覽器都支援;
優點:
最簡單的利用了瀏覽器的特性來做到不同域之間的資料傳遞;
#不需要前端和後端的特殊配製;
#缺點:
大小限制:window.name最大size是2M左右,不同瀏覽器會有不同約定;
安全性:目前頁面所有window都可以修改,很不安全;
資料類型:傳遞資料只能限於字串,如果是物件或其他會自動轉換為字串。
6、postMessage
關鍵點:
postMessage是h5引入的新概念,現在也在進一步的推廣和發展中,他進行了一系列的封裝,我們可以透過window.postMessage的方式進行使用,並可以監聽其發送的訊息;
#相容性:行動裝置可以放心用,但是pc端需要做降級處理
優點
不需要後端介入就可以做到跨域,一個函數外加兩個參數(請求url,發送資料)就可以搞定;
行動裝置相容性好;
以上是什麼是跨域怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!