首頁  >  文章  >  運維  >  什麼是跨域怎麼解決

什麼是跨域怎麼解決

云罗郡主
云罗郡主原創
2019-02-22 11:31:1054879瀏覽

相信很多人都聽過跨域,但很多人都不知道跨域是什麼意思,那麼,接下來我們來講解一下什麼是跨域,以及怎麼解決。

一:什麼是跨域

跨網域,是指瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn