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

Django 跨域資源共享(CORS)全面配置指南

 更新時間:2026年07月08日 09:08:07   作者:Python游俠  
本文主要介紹了Django項(xiàng)目跨域資源共享(CORS)的全面配置方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、CORS核心原理與中間件選型

1. 跨域問題示意圖

2. 推薦中間件庫

pip install django-cors-headers  # 當(dāng)前版本4.3.1

二、基礎(chǔ)配置流程

1. 中間件配置(關(guān)鍵順序)

# settings.py
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',  # 必須盡可能靠前
    'django.middleware.common.CommonMiddleware',
    # 其他中間件...
]

2. 最小化安全配置

# 允許的域名白名單
CORS_ALLOWED_ORIGINS = [
    "https://www.example.com",
    "http://localhost:8080",
]
# 啟用帶憑證的請求
CORS_ALLOW_CREDENTIALS = True
CSRF_COOKIE_SAMESITE = 'None'  # 配合CORS使用
SESSION_COOKIE_SAMESITE = 'None'

三、細(xì)粒度控制策略

1. 域名控制矩陣

配置項(xiàng)作用域示例值
CORS_ALLOWED_ORIGINS精確匹配["https://api.example.com"]
CORS_ALLOW_ORIGIN_REGEXES正則匹配[r"^https://\w+\.example\.com$"]
CORS_ALLOW_ALL_ORIGINS全部允許(危險!)True (僅限開發(fā)環(huán)境)

2. 方法/Header控制

# 允許的HTTP方法
CORS_ALLOW_METHODS = [
    'GET',
    'POST',
    'PUT',
    'PATCH',
    'DELETE',
    'OPTIONS'
]
# 允許的自定義Headers
CORS_ALLOW_HEADERS = [
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
]
# 預(yù)檢請求緩存時間(秒)
CORS_PREFLIGHT_MAX_AGE = 86400  # 24小時

四、高級場景配置

1. 動態(tài)域名白名單

# 結(jié)合數(shù)據(jù)庫動態(tài)控制
def cors_allow_origins(request):
    allowed_domains = Site.objects.filter(is_active=True).values_list('domain', flat=True)
    return [f"https://{domain}" for domain in allowed_domains]

CORS_ALLOWED_ORIGINS = cors_allow_origins(None)

2. 多環(huán)境差異化配置

# 開發(fā)環(huán)境配置
if DEBUG:
    CORS_ALLOW_ALL_ORIGINS = True
    CORS_ALLOW_HEADERS += ['debug-token']
else:
    CORS_ALLOWED_ORIGIN_REGEXES = [
        r"^https://\w+\.example\.com$",
        r"^https://example-\d+-app\.cloudprovider\.com$"
    ]

3. 自定義響應(yīng)頭處理

# 添加自定義CORS頭
CORS_EXPOSE_HEADERS = ['X-Custom-Header', 'Content-Range']

# 在中間件中動態(tài)添加
class CustomCorsMiddleware(CorsMiddleware):
    def process_response(self, request, response):
        response = super().process_response(request, response)
        response['X-API-Version'] = '2.0'
        return response

五、安全加固方案

1. 生產(chǎn)環(huán)境推薦配置

CORS_ALLOW_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
    "https://www.example.com",
    "https://cdn.example.net"
]
CORS_ALLOW_METHODS = ['GET', 'POST', 'OPTIONS']
CORS_ALLOW_HEADERS = [
    'authorization',
    'content-type',
]
CORS_PREFLIGHT_MAX_AGE = 600  # 10分鐘

2. 防御惡意請求

# 限制OPTIONS請求頻率
from django.core.cache import cache

class ThrottledCorsMiddleware(CorsMiddleware):
    def process_view(self, request, *args, **kwargs):
        if request.method == 'OPTIONS':
            ip = request.META.get('REMOTE_ADDR')
            if cache.get(f'cors_options_{ip}'):
                return HttpResponseTooManyRequests()
            cache.set(f'cors_options_{ip}', True, 60)
        return super().process_view(request, *args, **kwargs)

六、調(diào)試與驗(yàn)證

1. 測試CORS配置

# 使用cURL驗(yàn)證
curl -H "Origin: http://test.com" \
  -H "Access-Control-Request-Method: POST" \
  -H "Access-Control-Request-Headers: X-Requested-With" \
  -X OPTIONS --verbose http://api.example.com/data

2. 瀏覽器控制臺檢查

// 前端測試代碼
fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  credentials: 'include'
}).then(response => {
  console.log(response.headers.get('Access-Control-Allow-Origin'))
});

七、常見問題排查

現(xiàn)象可能原因解決方案
403 ForbiddenCSRF與CORS配置沖突檢查CSRF_TRUSTED_ORIGINS設(shè)置
預(yù)檢請求失敗缺少OPTIONS方法支持確認(rèn)CORS_ALLOW_METHODS包含OPTIONS
Cookie未攜帶未設(shè)置credentials: 'include'前后端同時啟用ALLOW_CREDENTIALS
自定義Header不生效未聲明CORS_EXPOSE_HEADERS添加需要暴露的Header到配置列表

通過本教程,您將掌握:

  1. Django項(xiàng)目CORS策略的精細(xì)化配置
  2. 生產(chǎn)環(huán)境下的安全最佳實(shí)踐
  3. 復(fù)雜業(yè)務(wù)場景的定制化解決方案
  4. 跨域問題的系統(tǒng)化調(diào)試方法論

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

您可能感興趣的文章:

相關(guān)文章

  • pyinstaller打包xgboost項(xiàng)目發(fā)生錯誤問題及解決

    pyinstaller打包xgboost項(xiàng)目發(fā)生錯誤問題及解決

    用pyinstaller打包調(diào)用了xgboost的項(xiàng)目時,運(yùn)行打包生成的可執(zhí)行文件時報錯,原因是libxgboost.so的一個依賴庫libgomp-a34b3233.so.1.0.0沒找到,將libgomp.so.1.0.0復(fù)制項(xiàng)目目錄并重命名為libgomp-a34b3233.so.1.0.0即可解決
    2026-01-01
  • python統(tǒng)計(jì)一個文本中重復(fù)行數(shù)的方法

    python統(tǒng)計(jì)一個文本中重復(fù)行數(shù)的方法

    這篇文章主要介紹了python統(tǒng)計(jì)一個文本中重復(fù)行數(shù)的方法,涉及針對Python中dict對象的使用及相關(guān)本文的操作,具有一定的借鑒價值,需要的朋友可以參考下
    2014-11-11
  • Python中連通域分割Two-Pass算法的原理與實(shí)現(xiàn)詳解

    Python中連通域分割Two-Pass算法的原理與實(shí)現(xiàn)詳解

    兩遍掃描法(?Two-Pass?),正如其名,指的就是通過掃描兩遍圖像,將圖像中存在的所有連通域找出并標(biāo)記,本文將詳細(xì)介紹Two-Pass算法的原理與實(shí)現(xiàn),需要的可以參考下
    2023-12-12
  • Python Requests訪問網(wǎng)絡(luò)更方便

    Python Requests訪問網(wǎng)絡(luò)更方便

    這篇文章主要介紹了使用Python Requests訪問網(wǎng)絡(luò),Python Requests 是一個非常強(qiáng)大的 HTTP 客戶端庫,用于發(fā)送 HTTP 請求,獲取響應(yīng)等操作,通過這個庫,你可以輕松地與 Web 服務(wù)進(jìn)行交互,實(shí)現(xiàn)各種網(wǎng)絡(luò)請求
    2024-01-01
  • Django REST framework 異常處理

    Django REST framework 異常處理

    本文將結(jié)合實(shí)例代碼,介紹Django REST framework 異常處理,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Python遞歸時間復(fù)雜度

    Python遞歸時間復(fù)雜度

    這篇文章主要介紹了Python遞歸時間復(fù)雜度,時間復(fù)雜度一般認(rèn)為O(logn),但遞歸算法的時間復(fù)雜度本質(zhì)上是要看遞歸的次數(shù),每次遞歸中的操作次數(shù),下面文章詳細(xì)介紹,需要的朋友可以參考一下
    2022-03-03
  • 使用Python操作Redis的完整指南

    使用Python操作Redis的完整指南

    Redis作為業(yè)界主流的內(nèi)存數(shù)據(jù)庫,配合Python的redis-py庫,能在不改變業(yè)務(wù)代碼結(jié)構(gòu)的前提下,把數(shù)據(jù)庫的查詢壓力降低90%以上,今天我們就從零開始,聊聊怎么用Python操作Redis,搭一套真正能打的緩存系統(tǒng),需要的朋友可以參考下
    2026-03-03
  • 基于Django filter中用contains和icontains的區(qū)別(詳解)

    基于Django filter中用contains和icontains的區(qū)別(詳解)

    下面小編就為大家分享一篇基于Django filter中用contains和icontains的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Pytorch 如何訓(xùn)練網(wǎng)絡(luò)時調(diào)整學(xué)習(xí)率

    Pytorch 如何訓(xùn)練網(wǎng)絡(luò)時調(diào)整學(xué)習(xí)率

    這篇文章主要介紹了Pytorch 如何訓(xùn)練網(wǎng)絡(luò)時調(diào)整學(xué)習(xí)率的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python進(jìn)階_淺談面向?qū)ο筮M(jìn)階

    python進(jìn)階_淺談面向?qū)ο筮M(jìn)階

    下面小編就為大家?guī)硪黄猵ython進(jìn)階_淺談面向?qū)ο筮M(jìn)階。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

馆陶县| 四川省| 安吉县| 桑日县| 南宫市| 遵义市| 五指山市| 加查县| 淮南市| 西乌珠穆沁旗| 易门县| 赤水市| 玛纳斯县| 普宁市| 旬阳县| 曲阜市| 班玛县| 上高县| 鄂伦春自治旗| 志丹县| 涿州市| 临清市| 白玉县| 金川县| 弥勒县| 长治县| 武川县| 闵行区| 九江市| 始兴县| 莱西市| 正安县| 当阳市| 安仁县| 平乐县| 上栗县| 清水河县| 无棣县| 绥芬河市| 吕梁市| 凤庆县|