這篇文章主要介紹Django如何解決跨域資源共享問題,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務衢江,十年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220cors問題介紹
跨域資源共享(CORS) 是一種機制,它使用額外的 HTTP 頭來告訴瀏覽器 讓運行在一個 origin (domain) 上的Web應用被準許訪問來自不同源服務器上的指定的資源。當一個資源從與該資源本身所在的服務器不同的域、協(xié)議或端口請求一個資源時,資源會發(fā)起一個跨域 HTTP 請求。 CORS機制允許 Web 應用服務器進行跨域訪問控制,從而使跨域數(shù)據(jù)傳輸?shù)靡园踩M行?,F(xiàn)代瀏覽器支持在API容器中使用CORS,以降低跨域 HTTP 請求所帶來的風險。
一個域是由協(xié)議、主機和端口號組成的,簡單地說,當兩個url的協(xié)議、主機和端口中存在一個不同時,它們屬于不同域,那么它們之間的互相訪問就會產(chǎn)生跨域訪問問題。
我的項目中,前端的地址是 http://localhost:8001 ,后端的地址是 http://localhost:8000 ,兩個地址的協(xié)議和主機都相同,但是端口號不同,因此,前端調(diào)用后端接口時,就會產(chǎn)生跨域訪問的問題。
簡單請求
簡單請求不會觸發(fā)跨域訪問中的預檢請求,滿足下列條件的為簡單請求:
使用下列方法之一
GET
HEAD
POST
headers字段集合主要包含以下類型:
Accept
Accept-Language
Content-Language
Content-type : text/plain 、 multipart/form-data 和 application/x-www-form-urlencoded
DRP
DownLink
Save-Data
Viewport-Width
Width
非簡單請求
非簡單請求即不滿足簡單請求條件的請求。非簡單請求在發(fā)出請求前需要先發(fā)送一個預檢請求,請求方法為 OPTIONS 方法。預檢請求的使用,可以避免跨域請求對服務器的用戶數(shù)據(jù)產(chǎn)生未預期的影響。 當請求滿足下述任一條件時,即應首先發(fā)送預檢請求:
使用了以下的HTTP方法:
PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH
首部字段里面包含了非簡單請求的頭部字段的字段
django中遇到的問題
在后臺開發(fā)中,就遇到了這樣的情況
錯誤提示中顯示,請求被 CORS 協(xié)議阻攔。
這里的 Origin 字段說明了請求源地址,采用了 OPTIONS 方法,然后發(fā)出請求的地址 Host
就是本機地址。下面是服務器的響應,但是沒有發(fā)出實際請求
然后,為了解決這一問題,我搜索過后,安裝了django-cors-headers庫,并且進行了配置,這里配置時我把django-cors-headers中間件放在了中間件第一位。再次訪問同樣的地址,結果如下:
1.首先,瀏覽器檢測訪問的請求頭中的字段,存在對 CORS 安全的首部字段集合之外的字段,所以,向服務器發(fā)送一個預檢請求。上圖可見,方法為 OPTIONS ,該方法不會對服務器資源產(chǎn)生影響。其中的請求頭中的 Access-Control-Request-Method 字段表明實際請求會采用 GET 方法, Origin 表示請求源,會在服務器中接受驗證。
2.驗證通過后,會在 response 請求頭添加不同的字段進行返回, 字段的意思如下:
首部字段 Access-Control-Allow-Headers :表示服務器允許的頭部字段。
首部字段 Access-Control-Allow-Methods :表明服務器允許客戶端使用 POST , GET 和 OPTIONS 等等方法發(fā)起請求。
首部字段 Access-Control-Allow-Origin :表示服務器允許的請求源。
首部字段 Access-Control-Max-Age :表明該響應的有效時間為86400秒,也就是24 小時。在有效時間內(nèi),瀏覽器無須為同一請求再次發(fā)起預檢請求。
3.然后,客戶端會發(fā)出實際請求,從結果上來看,預檢請求的 response 請求體中沒有任何信息,而實際請求則攜帶了服務器返回的信息。不難看出,預檢請求確實就是與服務器提前溝通,獲取與服務器相關信息的。
簡單的總結
非簡單請求需要發(fā)送預檢請求進行判斷,然后服務端與客戶端需要在頭部字段上達成一致,這樣才能正常訪問。不過,在django的開發(fā)中,直接使用django-cors-headers庫以后,只需要簡單的配置就能夠很好的解決問題。
以上是“Django如何解決跨域資源共享問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)成都網(wǎng)站設計公司行業(yè)資訊頻道!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享名稱:Django如何解決跨域資源共享問題-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://muchs.cn/article12/pojgc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供響應式網(wǎng)站、外貿(mào)建站、搜索引擎優(yōu)化、靜態(tài)網(wǎng)站、企業(yè)建站、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)