国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Django 解決CORS跨域問題的方法

這篇具有很好參考價值的文章主要介紹了Django 解決CORS跨域問題的方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

產(chǎn)生跨域問題的原因

Cross-Origin Resource Sharing(CORS) 跨域問題,在前后端后離項目,selenium , playweight 自動化測試代碼中經(jīng)常遇到。 而使用 python request, curl, postman 等非瀏覽器代碼發(fā)送請求時則不存在這個問題。

瀏覽器采用了同源保護策略,為了防御惡意攻擊,會檢查Request消息與Response消息的域名 Domain與端口 Port,如果不相同,則表示響應消息與請求消息不是同源,可能是偽造的響應消息,因此瀏覽器添加了CORS限制功能,默認不接受非同源的響應消息。

瀏覽器與服務(wù)器都運行在同一臺電腦上為何仍出現(xiàn)跨域問題?
原因: Ajax腳本在本機瀏覽器運行時, 默認主機地址為http://127.0.0.1:8848,而開發(fā)環(huán)境 django服務(wù)默認地址為:http://localhost:8000 上,因此,瀏覽器與服務(wù)器雖然主機名相同,但端口不同,所以不符合CORS要求,故瀏覽器仍然會出現(xiàn)CORS錯誤。

解決思路

如何解決這種情形的問題呢?
瀏覽器同源策略有條規(guī)則,Response頭部如果包含如下字段值,則不做CORS檢查。

Access-Control-Allow-Origin: *

接下來就是如何添加這個參數(shù)。 方法通常有2種:
(1) 方法1: 在使用前端代理在response中添加Access-Control-Allow-Origin:頭部參數(shù);
(2) 方法2:在服務(wù)器端,給response添加Access-Control-Allow-Origin頭部參數(shù)。

方法1,實施還是比較麻煩,前端還要安裝node.js的服務(wù)代理程序才能實現(xiàn)。而方法2,如果服務(wù)器使用django,則實現(xiàn)很容易。即通過中間件middleware 對所有response添加、修改頭部參數(shù)。

解決方法1: 通過自定義中間件修改Response頭部

在myproject/myapp/ 目錄下,新建1個 middlewares.py 文件

class CorsMiddleware(object):
    """中間件:跨域訪問"""
    def __init__(self, get_response):
        self.get_response = get_response
    
    def __call__(self, request):
        return self.get_response(request)
    
    # process_template_response(), process_response() 只能二選一、根據(jù)view的response類型,重載相應方法。 
    def process_template_response(self,request,response):
        # 如果view 使用了render渲染response,使用這個中間件
        response["Access-Control-Allow-Origin"] = "*"
        return response
        
    def process_response(self,request,response):
        # 如果view使用HttpResponse, 將使用這個中間件
        response["Access-Control-Allow-Origin"] = "*"
        return response

這個類的方法 process_template_response(), process_response(),用于為每個django response添加1個Access-Control-Allow-Origin: * 頭部參數(shù), 兩個方法使用1個就可以。 當然也可以利用這個中間件添加、修改其它頭部參數(shù)。

將新定義的中間件 CorsMiddleware 添加到 settings.py 的 middleware classes:的列表,如 Ajax使用的主機+端口號,如:http://127.0.0.1:8848

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'myapp.middlewares.CorsMiddleware',  # 允許跨域訪問中間件
]

再次發(fā)送Ajax請求,可以成功接收到django的響應數(shù)據(jù)。使用瀏覽器DevTools檢查Response響應頭部參數(shù),可以看到已經(jīng)添加了Access-Control-Allow-Origin: *

HTTP/1.1 200 OK
Date: Sat, 21 Aug 2023 08:26:17 GMT
Server: WSGIServer/0.2 CPython/3.11.4
Content-Type: text/html; charset=utf-8
Access-Control-Allow-Origin: *
X-Frame-Options: DENY
Content-Length: 5177
Vary: Cookie
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin

說明: 此方法雖然簡單易行,Access-Control-Allow-Origin 設(shè)置為*, 允許任何跨域訪問,顯然不太安全,每次修改須更新代碼,因此僅適用于開發(fā)測試環(huán)境。

解決方法2: 通過 django-cors-headers 庫來實現(xiàn)

生產(chǎn)環(huán)境下,建議通過第3方庫django-cors-headers 來實現(xiàn),其步驟如下

1) 安裝

pip install django-cors-headers

2) 修改 settings.py 配置文件

添加到應用列表

INSTALLED_APPS = (
    ##...
    'corsheaders'
)

添加中間件列表 corsheaders.middleware.CorsMiddleware

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    ......

然后,添加下面配置 允許所有 domain 訪問

CORS_ORIGIN_ALLOW_ALL = True

或者,允許某些域訪問

CORS_ORIGIN_ALLOW_ALL = False
# 允許域名加入白名單
CORS_ORIGIN_WHITELIST = (
    'http//:localhost:8000',
)

說明

在測試環(huán)境中,可以允許所有domain來訪問,以避免 CORS問題,前后端分離項目在生產(chǎn)環(huán)境下,通常應該部署在同域下,
如果確實需要跨域,則將前端域名添加到白名單 CORS_ORIGIN_WHITELIST配置項中,禁止其它域訪問。文章來源地址http://www.zghlxwxcb.cn/news/detail-842675.html

到了這里,關(guān)于Django 解決CORS跨域問題的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 解決系統(tǒng)開發(fā)中的跨域問題:CORS、JSONP、Nginx

    解決系統(tǒng)開發(fā)中的跨域問題:CORS、JSONP、Nginx

    本博客配套的源碼在這里 最近我在做一個系統(tǒng)的全棧開發(fā),遇到了這樣一個問題。 首先,我的前端是一個來自百度的開源框架——Amis,它封裝自React.js,基于JSON配置。我下載了Amis提供的SDK文件夾,并進行了代碼開發(fā)。但是我在部署整個系統(tǒng)的時候遇到了跨域問題。原因是,

    2024年01月20日
    瀏覽(29)
  • Node.js 使用 cors 中間件解決跨域問題

    Node.js 使用 cors 中間件解決跨域問題

    cors 是 Express 的一個第三方中間件。通過安裝和配置 cors 中間件,可以很方便地解決跨域問題。 CORS (Cross-Origin Resource Sharing,跨域資源共享)由一系列 HTTP 響應頭 組成, 這些 HTTP 響應頭決定瀏覽器是否阻止前端 JS 代碼跨域獲取資源 。 瀏覽器的 同源安全策略 默認會阻止網(wǎng)

    2024年01月20日
    瀏覽(62)
  • django后臺啟動CORS跨越配置

    什么是跨域問題? 跨域問題是指瀏覽器的同源策略限制了來自不同域的 AJAX 請求。 具體來說: 同源策略要求源相同才能正常進行 AJAX 通信。 判斷是否同源需要滿足三個條件: 協(xié)議相同(http或https) 域名相同 端口相同 不滿足以上條件就是不同源,屬于跨域。 舉個例子: 前端域名是

    2024年02月09日
    瀏覽(18)
  • 前端調(diào)用DRI后端API出現(xiàn)跨域資源共享(CORS)問題解決辦法

    目錄 1. 引言 2. 跨源資源共享和實現(xiàn)方法 3. 在Django項目中配置django-cors-headers庫 Reference 在進行后端API開發(fā)時,有時會遇到“跨域資源共享 (CORS) 請求...被阻止“的錯誤,如圖1所示。本文講解如何在使用DRF(Django REST Framework)的后端API開發(fā)項目中解決這個問題。 A cross-origin re

    2024年04月25日
    瀏覽(23)
  • 徹底理解前端安全面試題(3)—— CORS跨域資源共享,解決跨域問題,建議收藏(含源碼)

    徹底理解前端安全面試題(3)—— CORS跨域資源共享,解決跨域問題,建議收藏(含源碼)

    前端關(guān)于網(wǎng)絡(luò)安全看似高深莫測,其實來來回回就那么點東西,我總結(jié)一下就是 3 + 1 ?= 4,3個用字母描述的【分別是 XSS、CSRF、CORS】 + 一個中間人攻擊。當然 CORS 同源策略是為了防止攻擊的安全策略,其他的都是網(wǎng)絡(luò)攻擊。除了這 4 個前端相關(guān)的面試題,其他的都是一些不常

    2024年02月01日
    瀏覽(21)
  • HBuilderX修改manifest.json設(shè)置,解決跨域問題(CORS、Cross-Origin)

    HBuilderX修改manifest.json設(shè)置,解決跨域問題(CORS、Cross-Origin)

    搭建一個前臺uniapp,后臺springboot的開發(fā)環(huán)境時,遇到了跨域問題。 console提示錯誤信息: Access to XMLHttpRequest at \\\'http://10.0.180.203/api/cms/getAdList?apId=1\\\' from origin \\\'http://localhost:8080\\\' has been blocked by CORS policy: Response to preflight request doesn\\\'t pass access control check: No \\\'Access-Control-Allow-Origin\\\'

    2024年02月10日
    瀏覽(23)
  • Python django解決跨域請求的問題

    1.安裝django-cors-headers 2.配置settings.py文件 OK!問題解決! 另外還從網(wǎng)上看到其他兩種解決方案,但都不太合適。在此列出,供大家參考 1.使用JSONP 使用Ajax獲取json數(shù)據(jù)時,存在跨域的限制。不過,在Web頁面上調(diào)用js的script腳本文件時卻不受跨域的影響,JSONP就是利用這個來實現(xiàn)

    2024年02月16日
    瀏覽(25)
  • Chrome 跨域問題CORS 分析

    先疊個甲,有錯誤,望溝通指正! has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. 類似上面的報錯 ,就是出現(xiàn)了跨域限制訪問問題 同源策略(Same-Origin Policy),這個是瀏覽器的一個策略.也就

    2024年03月18日
    瀏覽(23)
  • flask解決cors跨域請求

    CORS的全稱是Cross-Origin Resource Sharing? ,有w3c組織制定的,現(xiàn)在這個規(guī)范,已經(jīng)被大多數(shù)瀏覽器支持,處理跨域的需求。 CORS需要后端應用進行配置,因此,這是一種后端跨域的配置方式,這種方式很容易理解,一個陌生的請求來訪問你的服務(wù)器,自然需要進行授權(quán)。。。 (關(guān)

    2024年02月12日
    瀏覽(19)
  • 前端跨域解決方案——CORS

    CORS(跨來源資源共享)是一種用于解決跨域問題的方案。 CORS(跨來源資源共享)是一種安全機制,用于在瀏覽器和服務(wù)器之間傳遞數(shù)據(jù)時,限制來自不同域名的請求。在前端開發(fā)中,當通過 XMLHttpRequest(XHR)或 Fetch API 發(fā)送跨域請求時,如果服務(wù)器沒有正確配置 CORS,瀏覽器

    2023年04月27日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包