Widget HTML5解決跨域問題

2022-03-25 05:47:26 字數 2230 閱讀 2758

html5解決跨域問題

由於瀏覽器的同源策略,網路連線的跨域訪問是不被允許的,xhr(協議

),主機號

(網域名稱、ip等

),埠號。

但是隨著開放,共享平台的流行,跨域訪問的需求愈加強烈。目前最常用的跨域方案是動態加入script

標籤,這多少有點

hack

的意味,跨域訪問似乎一直沒有什麼安全且光明正大的辦法。

終於,html5

提供的xmlhttprequest level2

實現了跨域訪問以及其他的一些新功能。下面我們會詳細討論一下:

xhr2是

html5

新特性中的乙個

(事實上沒有什麼

xhr1

,xhr2

這樣的概念,

xhr2

只是html5

提供的一套新的規範

),在原有

xhr物件上新增了一些功能:跨域訪問,全新的事件,還有請求進度以及響應進度。

目前瀏覽器對於xhr2

的相容列表:

原理:正常情況下,我們書寫乙個xhr

示例:

var xhr = new

訪問baidu.com

xhr.send(

null);

我們本地使用chrome

執行這段**,開啟控制台檢視錯誤資訊:

圖1在這裡可以看到,本次請求已經被kill掉。這是因為,我們的頁面在本地,域是

,與請求的

非同源。

那麼本次請求是何時被kill

的呢,是在發出前被瀏覽器確認為跨域請求而被立即終止了嗎?事實上,瀏覽器不僅發出了請求,還接收到了響應。然後根據響應頭的規則來確定這個域是否同源可以接收,如果不可以,瀏覽器就會報錯,接收到的資料也不會提供給指令碼。

我們回到xhr2

,上面提到,

xhr物件新增了一些功能,這裡就包括跨域訪問。實現如下:

//在伺服器端返回內容的頁面,設定

header access-control-allow-origin

如下

response.addheader("access-control-allow-origin","*") ;
這裡,我們先不討論設定的含義,先讓**跑起來,檢視結果如何。

頁面已經完成如上配置,修改

js**如下:

var xhr = new

訪問baidu.com

xhr.send();

重新整理頁面,檢視控制台,沒有報錯。開啟控制台的「network

」選型卡:

圖2可以看到紅線標識的部分:access-control-allow-origin:*

,即為我們在伺服器端所做的設定。切換到「

response

」選項卡:

圖3可以看到伺服器返回的內容,如此,我們完成了跨域訪問。

這是怎麼做到的呢?

瀏覽器在接收到伺服器返回資訊時,會檢查響應頭的access-control-allow-origin

,它的值標識請求內容所允許的域。

我們之前要求伺服器設定access-control-allow-origin為*

,表明該返回資訊允許所有源訪問。如果設定為具體的域,如

,就表明除了同源外,只允許域來自

niweisuo.com

的訪問。

注:在使用ajax

類庫時,可能經過如上的設定,依然無法通過瀏覽器的安全限制。那麼,可以檢查一下

ajax

類庫的**,看是否存在影響跨域設定的**:

圖4如上是tangram-ajax-1.5.2.js中,影響跨域的**,注釋調即可,其他類庫請自調。

node學習 5 跨域解決

十 七 跨域原理 跨域原因就是由於ajax同源策略,協議,主機 ip,網域名稱 埠號三者保持一致。十八 解決跨域問題 解決跨域常用的方法 1 cors 前後端配合 yarn add cors 安裝var express require express var cors require cors ex...

HTML5解決跨域問題

html5解決跨域問題 由於瀏覽器的同源策略,網路連線的跨域訪問是不被允許的,xhr物件不能直接與非同源的 處理資料互動。而同源指的是什麼呢?同源的範疇包括 規則 協議 主機號 網域名稱 ip等 埠號。但是隨著開放,共享平台的流行,跨域訪問的需求愈加強烈。目前最常用的跨域方案是動態加入script標...

跨域php,php怎麼解決跨域

php解決跨域問題 在做專案的過程中經常需要跨域訪問。這裡主要介紹一下 php 中怎麼解決跨域問題。1 允許所有網域名稱訪問header access control allow origin 2 允許單個網域名稱訪問header access control allow origin 3 允許多個...