當前位置:首頁 » 網頁前端 » 跨域的解決方案前端
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

跨域的解決方案前端

發布時間: 2022-10-20 00:14:51

前端如何去做跨域解決方案

文件訪問限制:

A域的前端頁面是能夠訪問A域的後台,而A域的前端頁面不能夠去訪問其他域的後台(瀏覽器不允許)

跨域來自於需求:

當客戶需求告訴我們,需要讓A域的前端頁面去訪問B域的後台,此時就出現了跨域,此時我們需要找一些方法或途徑解決這個「原本被禁止的功能」。

解決跨域的常見途徑:

常見解決途徑有4種,分別是iframe、JSONP、postMessage和伺服器代由訪問。這四種方法均沒有直接讓A域前端去訪問B域後台(換句話說,均採用了「曲線救國」的方式來解決問題)

資料來源:

HTML5學堂

Ⅱ web前端跨域的一些解決方案

沒有歸納之前對跨域的一些說法是模糊的,什麼jsonp啊,跨域原理啊,心裡只有一個大概的說法,知道這個東西,然後用的時候直接網路Ctrl+C,後來閑下來決定整理一波這些知識點,需知其所以然。

那麼,其實這是瀏覽器對我們的一種保護機制,把壞人擋在門外。那麼,問題來了,我們怎麼確定門外的人到底是好人還是壞人呢?瀏覽器關上了壞人的一扇門,留給了我們好人一扇窗。

JSONP跟JSON沒有關系..就好像JavaScript和Java一樣
瀏覽器對script、img(這些標簽的請求方式都是 GET ,所以jsonp不支持 POST )這種標簽沒有限制,我們就可以這樣干

因此,實現CORS通信的關鍵是伺服器。只要伺服器實現了CORS介面,就可以跨源通信。

伺服器端對於CORS的支持,主要就是通過設置 Access-Control-Allow-Origin 來進行的。如果瀏覽器檢測到相應的設置,就可以允許Ajax進行跨域的訪問。 更多有關跨域資源共享 CORS 的知識

瀏覽器中可以查看對應的響應頭,舉個例子,如下

服務端允許CORS,服務端需要針對介面設置的一系列響應頭 (Response Headers)

1.簡單請求
目前大多數情況都採用這種方式。簡單請求只需要設置 Access-Control-Allow-Origin 即可。滿足以下兩個條件,就屬於簡單請求。

2.非簡單請求
非簡單請求會發出一次預檢測請求,返回碼是204,預檢測通過才會真正發出請求,這才返回200。來看栗子:

非簡單請求需要根據不同情況配置不同的響應頭,一系列響應頭配置項見上方

這個說法相信不陌生,我們依然使用前端域名請求,然後有一個 中介商---代理 把這個請求轉發到真正的後端域名上,那也就不存在跨域問題了。
比較普遍的Nginx,簡單的配置一下就可以了。了解更多的配置信息: nginx詳解

然後前端這邊的請求地址是 http://localhost:9099/api/xxx ,然後Nginx監聽到地址是 localhost:9099/api 的請求,就幫我們轉發到真正的服務端地址 http://.com

CORS與JSONP的使用目的相同,但是比JSONP更強大。JSONP只支持GET請求,CORS支持所有類型的HTTP請求。JSONP的優勢在於支持老式瀏覽器,以及在服務端同意jsonp方式時,可以向不支持CORS的網站請求數據。Nginx可以說是最方便的,不過需要部署Nginx才行,需要對伺服器有一定的理解,不太適合剛入門的同學,當然也可以請後台同學幫忙部署。

window.postMessage(data,origin) 是 HTML5 的一個介面,專注實現不同窗口不同頁面的跨域通訊。

現在是這么一個情況,由於同源策略的限制下, a.html 不能操作iframe( b.html )裡面的dom,那麼使用postMessage就可以解決這一情況

然後 b.html 頁面通過message事件監聽並接受消息:

這種方式只適合主域名相同,但子域名不同的iframe跨域。
比如主域名是 http://.com/:8888 ,子域名是 http://child..com/:8888 ,這種情況下給兩個頁面設置相同的document.domain即document.domain = .com 就可以訪問各自的window對象了。

前端跨域整理
不要再問我跨域的問題了

Ⅲ 如何解決前端跨域問題

可以使用伺服器代理或者在後端設置允許跨域。
現在的項目一般是在後端設置允許跨域,前端在帶有允許跨域的情況下,可以像沒有跨域一樣正常訪問。
如果前端單獨發布到伺服器,也可以在伺服器是設置代理,使用代理轉發請求。

Ⅳ Web前端中實現跨域的方法有哪些

今天小編要跟大家分享的文章是關於Web前端中實現跨域的方法有哪些?正在從事Web前端工作的小夥伴們來和小編一起看一看本篇文章吧,希望能夠對大家有所幫助。

一、同源策略


同源策略是瀏覽器的一個安全功能,同源即協議、域名、埠三者相同。它限制了從一個源載入的文檔或腳本與另一個源進行數據交互,所以#下的JS腳本請求#的數據會被拒絕。


注意:跨域限制訪問,其實是瀏覽器的同源策略限制。


二、跨域


當協議、域名、埠任意一個不同時,都算不同域。不同域之間相互請求資源,就算跨域。


注意:跨域並不是請求發不出去,請求能發出去,服務端能收到請求並正常返回結果,只是結果被瀏覽器攔截了。


三、跨域的幾種方法


(1)有三個標簽允許跨域載入資源











(2)JSONP


JSONP(JSONwithPadding)是json的一種"使用模式",可以讓網頁從別的域名獲取資料,即跨域讀取數據。


JSONP由兩部分組成:回調函數和數據。回調函數是當響應到來時在頁面調用的數據。數據則為傳入回調函數的JSON數據。


JSONP通過




src="#/try/ajax/jsonp.php?jsoncallback=callbackFunction">





(3)CORS


CORS(Cross-OriginResource
Sharing,跨域源資源共享),基本思想為使用自定義的HTTP頭部讓瀏覽器與伺服器進行溝通,需要瀏覽器支持CORS。


客戶端:發送HTTP請求時,額外添加一個Origin頭部,包含請求頁面的源信息,伺服器根據此信息決定是否響應。


Origin:http://www.#


服務端:在響應頭添加Access-Control-Allow-Origin,回發相同源信息(公共資源可回「*」),若沒有此頭部,或頭部源信息不匹配,瀏覽器會駁回請求。


Access-Control-Allow-Origin:http://www.#


(4)WebSockets


Websocket是HTML5的一個持久化的協議,它實現了瀏覽器與伺服器的全雙工通信,同源策略對其不適用。


WebSocket在建立連接時要藉助HTTP協議,建立連接後會從HTTP交換為WebSocket協議,WebSocket的server
(服務端)與client(客戶端)都能主動向對方發送或接收數據。只有支持WebSocket協議的伺服器才能正常工作。


(5)postMessage


如果兩個網頁不同源,就無法拿到對方的DOM。典型的例子是iframe窗口和window.open方法打開的窗口,它們與父窗口無法通信。HTML5為了解決這個問題,引入了一個全新的API:跨文檔通信
API(Cross-document
messaging)。這個API為window對象新增了一個window.postMessage方法,允許跨窗口通信,不論這兩個窗口是否同源。


postMessage方法的第一個參數是具體的信息內容,第二個參數是接收消息的窗口的源(origin)。也可以設為*,表示不限制域名,向所有窗口發送。


以上就是小編今天為大家分享的關於Web前端中實現跨域的方法有哪些的文章,希望本篇文章能夠對正在從事Web前端工作的小夥伴們有所幫助,想要了解更多Web前端知識記得關注北大青鳥Web培訓官網,最後祝願小夥伴們工作順利,成為一名優秀的Web前端工程師。


文章來源:原創CodeEditCodeEdit


Ⅳ 前端跨域解決方案有哪些

處理跨域方法一——JSONP
1.JSONP原理
利用script元素的這個開放策略,網頁可以得到從其他來源動態產生的 JSON 數據。JSONP請求一定需要對方的伺服器做支持才可以。
2.JSONP和AJAX對比
JSONP和AJAX相同,都是客戶端向伺服器端發送請求,從伺服器端獲取數據的方式。但AJAX屬於同源策略,JSONP屬於非同源策略(跨域請求)
3.JSONP優缺點
JSONP優點是兼容性好,可用於解決主流瀏覽器的跨域數據訪問的問題。缺點是僅支持get方法具有局限性。
4.JSONP的流程(以第三方API地址為例,不必考慮後台程序)
聲明一個回調函數,其函數名(如fn)當作參數值,要傳遞給跨域請求數據的伺服器,函數形參為要獲取目標數據(伺服器返回的data)。
創建一個
伺服器接收到請求後,需要進行特殊的處理:把傳遞進來的函數名和它需要給你的數據拼接成一個字元串,例如:傳遞進去的函數名是fn,它准備好的數據是fn([{「name」:「jianshu」}])。
最後伺服器把准備的數據通過HTTP協議返回給客戶端,客戶端再調用執行之前聲明的回調函數(fn),對返回的數據進行操作。
處理跨域方法二——CORS
1.CORS原理
整個CORS通信過程,都是瀏覽器自動完成,不需要用戶參與。對於開發者來說,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣。瀏覽器一旦發現AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感覺。因此,實現CORS通信的關鍵是伺服器。只要伺服器實現了CORS介面,就可以跨源通信。
2.CORS優缺點
CORS要求瀏覽器(>IE10)和伺服器的同時支持,是跨域的根本解決方法,由瀏覽器自動完成。
優點在於功能更加強大支持各種HTTP Method,缺點是兼容性不如JSONP。
處理跨域方法三——WebSocket
Websocket是HTML5的一個持久化的協議,它實現了瀏覽器與伺服器的全雙工通信,同時也是跨域的一種解決方案。WebSocket和HTTP都是應用層協議,都基於 TCP 協議。但是 WebSocket 是一種雙向通信協議,在建立連接之後,WebSocket 的 server 與 client 都能主動向對方發送或接收數據。同時,WebSocket 在建立連接時需要藉助 HTTP 協議,連接建立好了之後 client 與 server 之間的雙向通信就與 HTTP 無關了。
原生WebSocket API使用起來不太方便,我們使用Socket.io,它很好地封裝了webSocket介面,提供了更簡單、靈活的介面,也對不支持webSocket的瀏覽器提供了向下兼容。
處理跨域方法四——postMessage
如果兩個網頁不同源,就無法拿到對方的DOM。典型的例子是iframe窗口和window.open方法打開的窗口,它們與父窗口無法通信。HTML5為了解決這個問題,引入了一個全新的API:跨文檔通信 API(Cross-document messaging)。這個API為window對象新增了一個window.postMessage方法,允許跨窗口通信,不論這兩個窗口是否同源。postMessage方法的第一個參數是具體的信息內容,第二個參數是接收消息的窗口的源(origin),即"協議 + 域名 + 埠"。也可以設為*,表示不限制域名,向所有窗口發送。

Ⅵ 前端解決跨域都有哪些手段

1. jsonp解決跨域,缺點:只局限於GET請求;應用場景:請求第三方平台數據(比如天氣數據)時使用較多
2. 伺服器端設置Access-Control-Allow-Origin響應頭,允許前端跨域。這種辦法比較便捷,前端不需要調整代碼,一般企業中用的比較多
3. 搭建一個本地的中間伺服器,作為代理,幫助獲取需要跨域的伺服器的數據
4. vue項目可以進行proxy反向代理的配置,實現跨域
黑馬程序員官網有成套免費視頻哦,有什麼不懂的可以直接過去學習。

Ⅶ 前端解決跨域都有哪些方法

什麼是跨域?

瀏覽器發送的請求地址(URL)與所在頁面的地址 不同(埠/協議/域名 其一不同)。簡言之,瀏覽器發出的請求url,與其所在頁面的url不一樣。此時,同源策略會讓瀏覽器拒收 伺服器響應回來的數據,報錯信息如下:


最常用的四種跨域解決方案

1.cors

cors跨域資源共享允許是在服務端"Access-Control-Allow-Origin"欄位設置的,當將cors設置為允許某個地址訪問時,該地址就可以跨域訪問這個伺服器地址。當cors設置為"*"時即允許所有地址訪問時,則表示所有地址都可以跨域訪問這個伺服器地址的資源。

2、 通過jsonp跨域

Jsonp是Json的一種「使用模式」,他就可以解決瀏覽器遇到的跨域問題,我們可以動態創建script,再請求一個帶參網址實現跨域通信。用Jsonp請求得到的是JavaScript,相當於直接用JavaScript解析。

3、postMessage跨域

在h5中新增了postMessage方法,postMessage可以實現跨文檔消息傳輸,我們可以通過Windows的message事件來監聽發送跨文檔消息傳輸內容。

4、proxy(代理)

原理:因為同源策略只是針對瀏覽器的安全策略,但是服務端並不受同源策略的限制,也就不存在跨域的問題。

Ⅷ 前端跨域方式有哪些

處理跨域方法一——JSONP
1.JSONP原理
利用script元素的這個開放策略,網頁可以得到從其他來源動態產生的 JSON 數據。JSONP請求一定需要對方的伺服器做支持才可以。
2.JSONP和AJAX對比
JSONP和AJAX相同,都是客戶端向伺服器端發送請求,從伺服器端獲取數據的方式。但AJAX屬於同源策略,JSONP屬於非同源策略(跨域請求)
3.JSONP優缺點
JSONP優點是兼容性好,可用於解決主流瀏覽器的跨域數據訪問的問題。缺點是僅支持get方法具有局限性。
4.JSONP的流程(以第三方API地址為例,不必考慮後台程序)
聲明一個回調函數,其函數名(如fn)當做參數值,要傳遞給跨域請求數據的伺服器,函數形參為要獲取目標數據(伺服器返回的data)。
創建一個
伺服器接收到請求後,需要進行特殊的處理:把傳遞進來的函數名和它需要給你的數據拼接成一個字元串,例如:傳遞進去的函數名是fn,它准備好的數據是fn([{「name」:「jianshu」}])。
最後伺服器把准備的數據通過HTTP協議返回給客戶端,客戶端再調用執行之前聲明的回調函數(fn),對返回的數據進行操作。
處理跨域方法二——CORS
1.CORS原理
整個CORS通信過程,都是瀏覽器自動完成,不需要用戶參與。對於開發者來說,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣。瀏覽器一旦發現AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感覺。因此,實現CORS通信的關鍵是伺服器。只要伺服器實現了CORS介面,就可以跨源通信。
2.CORS優缺點
CORS要求瀏覽器(>IE10)和伺服器的同時支持,是跨域的根本解決方法,由瀏覽器自動完成。
優點在於功能更加強大支持各種HTTP Method,缺點是兼容性不如JSONP。
處理跨域方法三——WebSocket
Websocket是HTML5的一個持久化的協議,它實現了瀏覽器與伺服器的全雙工通信,同時也是跨域的一種解決方案。WebSocket和HTTP都是應用層協議,都基於 TCP 協議。但是 WebSocket 是一種雙向通信協議,在建立連接之後,WebSocket 的 server 與 client 都能主動向對方發送或接收數據。同時,WebSocket 在建立連接時需要藉助 HTTP 協議,連接建立好了之後 client 與 server 之間的雙向通信就與 HTTP 無關了。
原生WebSocket API使用起來不太方便,我們使用Socket.io,它很好地封裝了webSocket介面,提供了更簡單、靈活的介面,也對不支持webSocket的瀏覽器提供了向下兼容。
處理跨域方法四——postMessage
如果兩個網頁不同源,就無法拿到對方的DOM。典型的例子是iframe窗口和window.open方法打開的窗口,它們與父窗口無法通信。HTML5為了解決這個問題,引入了一個全新的API:跨文檔通信 API(Cross-document messaging)。這個API為window對象新增了一個window.postMessage方法,允許跨窗口通信,不論這兩個窗口是否同源。postMessage方法的第一個參數是具體的信息內容,第二個參數是接收消息的窗口的源(origin),即"協議 + 域名 + 埠"。也可以設為*,表示不限制域名,向所有窗口發送。

Ⅸ 如何解決前端跨域問題

IIS伺服器可以修改web.config實現跨域
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="GET, PATCH, POST, PUT, DELETE, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="AuthToken, Authorization, Origin, Content-Type, Accept, X-Requested-With" />
<add name="Access-Control-Allow-Origin" value="http://域名" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>

Ⅹ 前端跨域問題有哪些常用的解決方式

強烈推薦JSONP。

Jsonp(JSON with Padding) 是 json 的一種"使用模式",可以讓網頁從別的域名(網站)那獲取資料,即跨域讀取數據。

http://www.cnblogs.com/yuzhongwusan/archive/2012/12/11/2812849.html

http://www.runoob.com/json/json-jsonp.html

http://justcoding.iteye.com/blog/1366102/