最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django跨域資源共享問題(推薦)

 更新時間:2020年03月09日 10:21:12   作者:黑里俏  
跨域資源共享(CORS) 是一種機(jī)制,它使用額外的 HTTP 頭來告訴瀏覽器 讓運(yùn)行在一個 origin (domain) 上的Web應(yīng)用被準(zhǔn)許訪問來自不同源服務(wù)器上的指定的資源。這篇文章主要介紹了Django跨域資源共享問題小結(jié),需要的朋友可以參考下

最近做了一個前后端分離的web項(xiàng)目,其中我司職后端,使用django框架。在前后端集成測試的時候,就遇到了一些web安全相關(guān)的問題,cors跨域資源共享就是其中之一。

cors問題介紹

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

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

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

簡單請求

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

使用下列方法之一

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ā)送一個預(yù)檢請求,請求方法為 OPTIONS 方法。預(yù)檢請求的使用,可以避免跨域請求對服務(wù)器的用戶數(shù)據(jù)產(chǎn)生未預(yù)期的影響。 當(dāng)請求滿足下述任一條件時,即應(yīng)首先發(fā)送預(yù)檢請求:

使用了以下的HTTP方法:

PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH

首部字段里面包含了非簡單請求的頭部字段的字段

django中遇到的問題

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

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

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

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

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

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

  • 首部字段 Access-Control-Allow-Headers :表示服務(wù)器允許的頭部字段。
  • 首部字段 Access-Control-Allow-Methods :表明服務(wù)器允許客戶端使用 POST , GET 和 OPTIONS 等等方法發(fā)起請求。
  • 首部字段 Access-Control-Allow-Origin :表示服務(wù)器允許的請求源。
  • 首部字段 Access-Control-Max-Age :表明該響應(yīng)的有效時間為86400秒,也就是24 小時。在有效時間內(nèi),瀏覽器無須為同一請求再次發(fā)起預(yù)檢請求。

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

簡單的總結(jié)

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

到此這篇關(guān)于Django跨域資源共享問題小結(jié)的文章就介紹到這了,更多相關(guān)django跨域資源共享內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)雨滴下落到地面效果

    python實(shí)現(xiàn)雨滴下落到地面效果

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)雨滴下落到地面效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 如何使用 Python 中的功能和庫創(chuàng)建 n-gram

    如何使用 Python 中的功能和庫創(chuàng)建 n-gram

    在計(jì)算語言學(xué)中,n-gram 對于語言處理、上下文和語義分析非常重要,它們是從令牌字符串中相鄰的連續(xù)單詞序列,本文將討論如何使用 Python 中的功能和庫創(chuàng)建 n-gram,感興趣的朋友一起看看吧
    2023-09-09
  • Python Thread虛假喚醒概念與防范詳解

    Python Thread虛假喚醒概念與防范詳解

    這篇文章主要介紹了Python Thread虛假喚醒概念與防范,虛假喚醒是一種現(xiàn)象,它只會出現(xiàn)在多線程環(huán)境中,指的是在多線程環(huán)境下,多個線程等待在同一個條件上,等到條件滿足時,所有等待的線程都被喚醒,但由于多個線程執(zhí)行的順序不同
    2023-02-02
  • 最新評論

    阿克| 禄劝| 图木舒克市| 中卫市| 哈巴河县| 游戏| 双流县| 南京市| 铜梁县| 突泉县| 江津市| 西盟| 双城市| 南岸区| 论坛| 新兴县| 阜新| 乌海市| 郴州市| 绿春县| 巢湖市| 禹城市| 岗巴县| 吴江市| 玉山县| 凌云县| 汉源县| 双流县| 普安县| 富宁县| 凤山市| 柏乡县| 玛曲县| 高陵县| 乐业县| 济源市| 巩义市| 甘南县| 玉屏| 麻栗坡县| 贵定县|