python django cors跨域設定

2021-08-21 17:34:54 字數 3053 閱讀 4283

什麼是cors?

cors(跨域資源共享,cross-origin resource sharing)是一種跨域訪問的機制,可以讓ajax實現跨域訪問。

其實,在伺服器的response header中,加入「access-control-allow-origin: *」即可支援cors,非常的簡單,apache/nginx等怎麼配置,見參考文件。

舉個例子:

以上過程就發生了跨域訪問。如果直接使用ajax來請求就會失敗,就像chrome提示的:?

no 'access-control-allow-origin' header is present on the requested resource.

如何解決ajax跨域訪問問題?

解決跨域問題,有兩個方法:1.使用jsonp 2.使cors生效

使用jsonp方法,需要讓伺服器端放回jsonp格式的response,如django可以加jsonp相關的decorator,如:由於我不太喜歡這種方式,所以這裡略過了,可看後面的參考資料。

使用cors:這個用起來比較方便,現在大多數瀏覽器都支援了,且我web伺服器完全開放給別人呼叫,所以比較推薦cors。

1.使用jsonp

使用ajax獲取json資料時,存在跨域的限制。不過,在web頁面上呼叫js的script指令碼檔案時卻不受跨域的影響,jsonp就是利用這個來實現跨域的傳輸。因此,我們需要將ajax呼叫中的datatype從json改為jsonp(相應的api也需要支援jsonp)格式。

jsonp只能用於get請求。

2.直接修改django中的views.py檔案

修改views.py中對應api的實現函式,允許其他域通過ajax請求資料:?

3.安裝django-cors-headers

這裡還有一各發現!在django中,有人開發了cors-header的middleware,只在settings.py中做一些簡單的配置即可,見:現在用起來伺服器端完全開放,開啟cors,沒有跨域煩惱,真爽!~

安裝django-cors-headers:?

pipinstalldjango-cors-headers

在settings.py中增加:

=(

...

'corsheaders',

...

)

...

middleware_classes=(

...

'corsheaders.middleware.corsmiddleware',

'django.middleware.common.commonmiddleware',

...

)

#跨域增加忽略

nginx跨域設定(同時介面程式也有跨域設定)

nginx配置兩個網域名稱 子網域名稱不同,如 aaa.123.com bbb.123.com 分別對應前後端,後端已有跨域設定,均通過nginx訪問正常。此時另乙個網域名稱h5通過nginx請求後端,跨域報錯了 報文裡沒有那倆header 按照網上一大堆cc cv說的nginx配置add head...

js跨域 ajax跨域 跨域方式(前端)

跨域方式 cors 跨域資源共享 當使用xmlhttprequest傳送請求時,瀏覽器會自動加上乙個請求頭 origin,後端在接受到請求後確定響應後會在response headers中加入乙個屬性 access control allow origin,值就是發起請求的源位址 瀏覽器得到響應會進...

跨域與跨域訪問

跨域是指從乙個網域名稱的網頁去請求另乙個網域名稱的資源。比如從www.baidu.com 頁面去請求 www.google.com 的資源。跨域的嚴格一點的定義是 只要協議,網域名稱,埠有任何乙個的不同,就被當作是跨域 使用者訪問www.mybank.com 登陸並進行網銀操作,這時cookie啥的...