真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Django如何解決跨域資源共享問題-創(chuàng)新互聯(lián)

這篇文章主要介紹Django如何解決跨域資源共享問題,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)衢江,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

cors問題介紹

跨域資源共享(CORS) 是一種機(jī)制,它使用額外的 HTTP 頭來告訴瀏覽器 讓運(yùn)行在一個(gè) origin (domain) 上的Web應(yīng)用被準(zhǔn)許訪問來自不同源服務(wù)器上的指定的資源。當(dāng)一個(gè)資源從與該資源本身所在的服務(wù)器不同的域、協(xié)議或端口請(qǐng)求一個(gè)資源時(shí),資源會(huì)發(fā)起一個(gè)跨域 HTTP 請(qǐng)求。 CORS機(jī)制允許 Web 應(yīng)用服務(wù)器進(jìn)行跨域訪問控制,從而使跨域數(shù)據(jù)傳輸?shù)靡园踩M(jìn)行?,F(xiàn)代瀏覽器支持在API容器中使用CORS,以降低跨域 HTTP 請(qǐng)求所帶來的風(fēng)險(xiǎn)。

一個(gè)域是由協(xié)議、主機(jī)和端口號(hào)組成的,簡單地說,當(dāng)兩個(gè)url的協(xié)議、主機(jī)和端口中存在一個(gè)不同時(shí),它們屬于不同域,那么它們之間的互相訪問就會(huì)產(chǎn)生跨域訪問問題。

Django如何解決跨域資源共享問題

我的項(xiàng)目中,前端的地址是 http://localhost:8001 ,后端的地址是 http://localhost:8000 ,兩個(gè)地址的協(xié)議和主機(jī)都相同,但是端口號(hào)不同,因此,前端調(diào)用后端接口時(shí),就會(huì)產(chǎn)生跨域訪問的問題。

簡單請(qǐng)求

簡單請(qǐng)求不會(huì)觸發(fā)跨域訪問中的預(yù)檢請(qǐng)求,滿足下列條件的為簡單請(qǐng)求:

使用下列方法之一

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

非簡單請(qǐng)求

非簡單請(qǐng)求即不滿足簡單請(qǐng)求條件的請(qǐng)求。非簡單請(qǐng)求在發(fā)出請(qǐng)求前需要先發(fā)送一個(gè)預(yù)檢請(qǐng)求,請(qǐng)求方法為 OPTIONS 方法。預(yù)檢請(qǐng)求的使用,可以避免跨域請(qǐng)求對(duì)服務(wù)器的用戶數(shù)據(jù)產(chǎn)生未預(yù)期的影響。 當(dāng)請(qǐng)求滿足下述任一條件時(shí),即應(yīng)首先發(fā)送預(yù)檢請(qǐng)求:

使用了以下的HTTP方法:

PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH

首部字段里面包含了非簡單請(qǐng)求的頭部字段的字段

django中遇到的問題

在后臺(tái)開發(fā)中,就遇到了這樣的情況

Django如何解決跨域資源共享問題

錯(cuò)誤提示中顯示,請(qǐng)求被 CORS 協(xié)議阻攔。

Django如何解決跨域資源共享問題

這里的 Origin 字段說明了請(qǐng)求源地址,采用了 OPTIONS 方法,然后發(fā)出請(qǐng)求的地址 Host
就是本機(jī)地址。下面是服務(wù)器的響應(yīng),但是沒有發(fā)出實(shí)際請(qǐng)求

Django如何解決跨域資源共享問題

然后,為了解決這一問題,我搜索過后,安裝了django-cors-headers庫,并且進(jìn)行了配置,這里配置時(shí)我把django-cors-headers中間件放在了中間件第一位。再次訪問同樣的地址,結(jié)果如下:

Django如何解決跨域資源共享問題

1.首先,瀏覽器檢測訪問的請(qǐng)求頭中的字段,存在對(duì) CORS 安全的首部字段集合之外的字段,所以,向服務(wù)器發(fā)送一個(gè)預(yù)檢請(qǐng)求。上圖可見,方法為 OPTIONS ,該方法不會(huì)對(duì)服務(wù)器資源產(chǎn)生影響。其中的請(qǐng)求頭中的 Access-Control-Request-Method 字段表明實(shí)際請(qǐng)求會(huì)采用 GET 方法, Origin 表示請(qǐng)求源,會(huì)在服務(wù)器中接受驗(yàn)證。

2.驗(yàn)證通過后,會(huì)在 response 請(qǐng)求頭添加不同的字段進(jìn)行返回, 字段的意思如下:

  • 首部字段 Access-Control-Allow-Headers :表示服務(wù)器允許的頭部字段。

  • 首部字段 Access-Control-Allow-Methods :表明服務(wù)器允許客戶端使用 POST , GET 和 OPTIONS 等等方法發(fā)起請(qǐng)求。

  • 首部字段 Access-Control-Allow-Origin :表示服務(wù)器允許的請(qǐng)求源。

  • 首部字段 Access-Control-Max-Age :表明該響應(yīng)的有效時(shí)間為86400秒,也就是24 小時(shí)。在有效時(shí)間內(nèi),瀏覽器無須為同一請(qǐng)求再次發(fā)起預(yù)檢請(qǐng)求。

3.然后,客戶端會(huì)發(fā)出實(shí)際請(qǐng)求,從結(jié)果上來看,預(yù)檢請(qǐng)求的 response 請(qǐng)求體中沒有任何信息,而實(shí)際請(qǐng)求則攜帶了服務(wù)器返回的信息。不難看出,預(yù)檢請(qǐng)求確實(shí)就是與服務(wù)器提前溝通,獲取與服務(wù)器相關(guān)信息的。

簡單的總結(jié)

非簡單請(qǐng)求需要發(fā)送預(yù)檢請(qǐng)求進(jìn)行判斷,然后服務(wù)端與客戶端需要在頭部字段上達(dá)成一致,這樣才能正常訪問。不過,在django的開發(fā)中,直接使用django-cors-headers庫以后,只需要簡單的配置就能夠很好的解決問題。

以上是“Django如何解決跨域資源共享問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


分享名稱:Django如何解決跨域資源共享問題-創(chuàng)新互聯(lián)
分享URL:http://weahome.cn/article/pojgc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部