程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django cors跨域問題

編輯:Python

Django cors跨域問題

前後端分離項目中的跨域問題 即同源策略

同源策略:同源策略/SOP(Same origin policy)是一種約定,由 Netscape 公司 1995 年引入浏覽器,它是浏覽器最核心也最基本的安全功能,現在所有支持 JavaScript 的浏覽器都會使用這個策略。如果缺少了同源策略,浏覽器很容易受到 XSS、 CSFR 等攻擊。

同源是指"協議+域名+端口"三者相同,即便兩個不同的域名指向同一個 ip 地址,也非同源。

源就是協議、域名和端口號。

協議:http,https

跨域:前端請求URL的協議、域名、端口與前端頁面URL不同就是跨域

在Django中解決跨域問題

一、

# 1、安裝第三方庫 django-cors-headers
# 2、在settings.py中添加'corsheaders.middleware.CorsMiddleware',在SessionMiddleware和CommonMiddleware的中間
# 3、在INSTALLED_APPS裡添加“corsheaders” INSTALLED_APPS = [
'search.apps.SearchConfig',
'data.apps.DataConfig',
'record_data.apps.RecordDataConfig',
'deleted_data.apps.DeletedDataConfig',
'mgmt.apps.MgmtConfig',
'c_test.apps.CTestConfig',
'rest_framework',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders', # 新增
] # 4、在中間件中添加corsheaders.middleware.CorsMiddleware,django.middleware.common.CommonMiddleware MIDDLEWARE = [
# 'utils.middleware.ExceptionMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware', # 新增/必須在common中間件上面
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
] # 5、在settings.py底部增加 CORS_ALLOW_CREDENTIALS = True # 允許攜帶cookie
CORS_ORIGIN_ALLOW_ALL = True # 放行所有
CORS_ORIGIN_WHITELIST = ('*') # 白名單 # CORS_ALLOW_METHODS:字符串列表,允許用哪些HTTP請求方法。
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
) # CORS_ALLOW_HEADERS:字符串列表,允許使用哪些非標准HTTP請求頭。
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)

二、

# 可以自己注冊一個中間件,在中間件process_response方法中對response進行封裝
def process_response(self, request, response):
response["Content-Type"] = "application/json" # 響應信息的內容格式
response["Access-Control-Allow-Origin"] = "*" # 允許跨域請求的源地址, * 表示:允許所有地址
response["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS" # 允許跨域請求的具體方法
response["Access-Control-Max-Age"] = "1000" # 用來指定本次預檢請求的有效期,單位為秒,,在此期間不用發出另一條預檢請求。
response["Access-Control-Allow-Headers"] = "*"
return response
  • 跨域實現流程為

    1、浏覽器會第一次先發送options請求詢問後端是否允許跨域,後端查詢白名單中是否有這兩個域名

    2、如過域名在白名單中則在響應結果中告知浏覽器允許跨域

    3、浏覽器第二次發送post請求,攜帶用戶登錄數據到後端,完成登錄驗證操作

Django cors跨域問題的更多相關文章

  1. Django CORS跨域資源共享

    1,什麼是CORS ​ 允許浏覽器向跨源(協議 + 域名 + 端口)服務器發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制 2,特點 ​ 1,浏覽器自動完成(在請求頭中加入特 ...

  2. django上課筆記7-jQuery Ajax 和 原生Ajax-偽造的Ajax-三種Ajax上傳文件方法-JSONP和CORS跨域資源共享

    一.jQuery Ajax 和 原生Ajax from django.conf.urls import url from django.contrib import admin from app01 ...

  3. 浏覽器的同源策略及CORS跨域解決方案 DRF

    一個源的定義 如果兩個頁面的協議,端口(如果有指定)和域名都相同,則兩個頁面具有相同的源. 舉個例子: 下表給出了相對http://a.xyz.com/dir/page.html同源檢測的示例: UR ...

  4. 4 偽ajax:jsonp、cors 跨域請求

    一.同源策略 https://www.cnblogs.com/yuanchenqi/articles/7638956.html 同源策略(Same origin policy)是一種約定,它是浏覽器最 ...

  5. Django框架深入了解_05 (Django中的緩存、Django解決跨域流程(非簡單請求,簡單請求)、自動生成接口文檔)

    一.Django中的緩存: 前戲: 在動態網站中,用戶所有的請求,服務器都會去數據庫中進行相應的增,刪,查,改,渲染模板,執行業務邏輯,最後生成用戶看到的頁面. 當一個網站的用戶訪問量很大的時候,每一 ...

  6. Django 處理跨域的配置、前台處理ajax

    一. Django處理跨域 跨域的處理方式有很多,使用最多的就是CORS(跨域資源共享),接下來大致提一下django中處理跨域的配置. 首先安裝django-cors-headers模塊: pip ...

  7. django 的跨域配置

    1.跨域原理 #1. 首先浏覽器安全策略限制js ajax跨域訪問服務器 #2. 如果服務器返回的頭部信息中有當前域: // 允許 http://localhost:8080 這個網站打開的頁面中的j ...

  8. django配置跨域並開發測試接口

    1.創建一個測試項目 1.1 創建項目和APP django-admin startproject BookManage # 創建項目 python manage.py startapp books ...

  9. 02.django配置跨域並開發測試接口

    1.創建一個測試項目   1.1 創建項目和APP   '''1.創建項目和APP''' django-admin startproject BookManage # 創建項目 python mana ...

  10. day3(django配置跨域)

    1.跨越原理 1. 首先浏覽器安全策略限制js ajax跨域訪問服務器 2. 如果服務器返回的頭部信息中有當前域: // 允許 http://localhost:8080 這個網站打開的頁面中的js訪 ...

隨機推薦

  1. 實現PageProcessor

    4.1 實現PageProcessor 這部分我們直接通過GithubRepoPageProcessor這個例子來介紹PageProcessor的編寫方式.我將PageProcessor的定制分為三個 ...

  2. Linq 操作基礎

    參考資料: LINQ系列:LINQ to DataSet的DataTable操作 List<T>轉換為DataTable C# DataTable 和List之間相互轉換的方法 Linq中 ...

  3. SQL語句建表、設置主鍵、外鍵、check、default、unique約束

    · 什麼是數據庫? 存放數據的倉庫. · 數據庫和數據結構有什麼區別? 數據結構要解決在內存中操作數據的問題,數據庫要解決在硬盤中操作數據的問題.數據結構研究一些抽象數據模型(ADT)和以及定義在該模 ...

  4. staging server, source congtrol, deply workflow using git

    web項目開發中,有三個實踐對於項目成功是非常重要的: 1. staging servers 2. Version control workflows 3. Tested, repeatable de ...

  5. BZOJ_1609_[Usaco2008_Feb]_Eating_Together_麻煩的聚餐_(動態規劃,LIS)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1609 給出一串由1,2,3組成的數,求最少需要改動多少個數,使其成為不降或不升序列. 分析 法 ...

  6. 網絡流(最大流)CodeForces 512C:Fox And Dinner

    Fox Ciel is participating in a party in Prime Kingdom. There are n foxes there (include Fox Ciel). T ...

  7. Vs2015 Ef 連接Oracle 出現OracleInternal.Common.ConfigBaseClass 的解決辦法

    如果配置沒問題的話,就是 Oracle.ManagedDataAccess 在全局程序集的版本問題 解決方法方法 將Oracle.ManagedDataAccess  GAC全局程序集中移除 1:用C ...

  8. CharSequence的getText()與String的getString()(轉)

    CharSequence的getText()與String的getString()『Android系列七』 曾經在學習中碰見兩種獲取常量的方式: CharSequence chrs = getText ...

  9. 前端 -----jQuery的選擇器

    02-jQuery的選擇器   我們以前在CSS中學習的選擇器有: 今天來學習一下jQuery 選擇器. jQuery選擇器是jQuery強大的體現,它提供了一組方法,讓我們更加方便的獲取到頁面中的元 ...

  10. linux每日命令(39):lsof命令

    lsof(list open files)是一個列出當前系統打開文件的工具.在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件.所以如傳輸控制協議 ...


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved