Nginx配置跨域訪問

2021-08-30 15:21:32 字數 1821 閱讀 2245

由於瀏覽器同源策略的存在使得乙個源中載入來自其它源中資源的行為受到了限制。即會出現跨域請求禁止。

通俗一點說就是如果存在協議、網域名稱、埠或者子網域名稱不同服務端,或一者為ip位址,一者為網域名稱位址(在跨域問題上,域僅僅是通過"url的首部"來識別而不會去嘗試判斷相同的ip位址對應著兩個域或者兩個域是否同屬同乙個ip),之中任意服務端旗下的客戶端發起請求其它服務端資源的訪問行動都是跨域的,而瀏覽器為了安全問題一般都限制了跨域訪問,也就是不允許跨域請求資源。

但很多時候我們卻又不得不去跨域請求資源,這個時候就需要我們想方法去繞過瀏覽器同源策略的限制了。

常見的跨域請求解決方法:

1.jsonp 利用script標籤發起get請求不會出現跨域禁止的特點實現

2.window.name+iframe 借助中介屬性window.name實現

3.cors需要伺服器設定header:access-control-allow-origin

4.nginx反向** 可以不需要目標伺服器配合,不過需要nginx中轉伺服器,用於**請求(服務端之間的資源請求不會有跨域限制)

使用ajax跨域請求資源,nginx作為**,出現以下錯誤:

the 'access-control-allow-origin' header contains multiple values '*, *', but only one is allowed
解決方法:

使用nginx作為反向**伺服器,並在配置中對應的location下新增上如下的設定

add_header 'access-control-allow-origin' '*';

add_header 'access-control-allow-credentials' 'true';

add_header cache-control private;

add_header 'access-control-allow-methods' 'get, post, options';

add_header 'access-control-allow-headers' 'dnt,x-customheader,keep-alive,user-agent,x-requested-with,if-modified-since,cache-control,content-type';

完整配置如下:

server 	}	

# **服務端介面

location /api

proxy_pass #將真正的請求**到api 服務位址 }

location ^~/cross_origin/

proxy_pass ; #將真正的請求**到api 服務位址

}}

服務端允許跨域配置:

#region 設定允許跨域,允許複雜請求

#endregion

備註:如果伺服器設定了允許跨域,使用nginx**裡面就不需要了(或者就不用使用nginx了)

大家可以參考這個nginx文件:

cores裡面引數含義請參考:

配置nginx支援跨域訪問

解決方案 因為nginx預設是禁止跨域訪問的,所有當跨域請求資料的時候拿不到相應的資料,特別是字型。生產環境介紹 訪問www.a.com的時候,需要呼叫www.b.com下的css js image 字型等,因為設計到跨域,所以nginx拒絕了我的字型的請求,所以在www.b.com下面的serve...

跨域訪問(nginx)

注意 jsonp解決跨域只支援get 請求。ajax 需要自己寫個 函式 function onback 後台介面注意 context.response.write jsonp json.tostring trimend control type 2018 03 21 18 50 09string ...

跨域訪問及Nginx解決跨域訪問

同源策略 sameorigin policy 是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現。同源策略是處於對使用者安全的考慮,如果非同源就會受到以下限制 但是事實是經常...