什麼是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:?
pip
install
django-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啥的...