瀏覽器的同源策略:同源策略是一種瀏覽器最基本的安全機制,如果兩個 url 的 protocol、port (如果有指定的話)和 host 都相同的話,則這兩個 url 是同源。
支援python 3.6至3.9。
支援django 2.2到3.2。
1、從pip安裝:
pip install django-cors-headers
2、修改settings.py:
...'django.contrib.staticfiles',
'corsheaders', # 放在新建應用前
...]
middleware = [
'django.middleware.security.securitymiddleware',
'django.contrib.sessions.middleware.sessionmiddleware',
'corsheaders.middleware.corsmiddleware', # 注意位置
'django.middleware.common.commonmiddleware',
'django.middleware.csrf.csrfviewmiddleware',
...]
在django設定中配置中介軟體的行為。必須至少設定以下三個之一:
格式為uri+主機名+埠
「 ]之前版本,此設定稱為cors_origin_whitelist,該設定仍用作別名,新名稱優先。
cors_allowed_origin_regexes:表示正規表示式的字串列表,與被授權發出跨站點http請求的origins相匹配。預設為。
當 cors_allowed_origins不可行時很有用。
]之前版本,此設定稱為cors_origin_regex_whitelist,該設定仍用作別名,新名稱優先。
cors_allow_all_origins:如果為true,則將允許所有原點。限制允許的原點的其他設定將被忽略。預設為false。
之前版本,此設定稱為cors_origin_allow_all,該設定仍用作別名,新名稱優先。
cors_urls_regex:正規表示式,用於限制將為其傳送cors標頭的url。
cors_urls_regex = r '^ / api /.*$'
cors_allow_methods:實際請求所允許的http動詞列表。
cors_allow_methods = [
'delete' ,
'get' ,
'options' ,
'patch' ,
'post' ,
'put' ,
]
cors_allow_headers:發出實際請求時可以使用的非標準http標頭的列表。
cors_allow_headers = [
''accept' ,
'accept-encoding' ,
'authorization' ,
'content-type' ,
'dnt' ,
'origin' ,
'user-agent' ,
'x-csrftoken' ,
'x-requested-with' ,
]
1、csrf_trusted_origins設定
cors_allowed_origins = [
'' ,
'' ,
] csrf_trusted_origins = [
'change.allowed.com' ,
]
2、中介軟體設定:
middleware_classes = [
...
'corsheaders.middleware.corsmiddleware' ,
...
'django.middleware.csrf.csrfviewmiddleware' ,
'corsheaders.middleware.corspostcsrfmiddleware' ,
...
]
# cors.py
"""解決跨域問題的中介軟體,作用全域性"""
class middlewaremixin(object):
def __init__(self, get_response=none):
self.get_response = get_response
super(middlewaremixin, self).__init__()
def __call__(self, request):
response = none
if hasattr(self, 'process_request'):
response = self.process_request(request)
if not response:
response = self.get_response(request)
if hasattr(self, 'process_response'):
response = self.process_response(request, response)
return response
class corsmiddleware(middlewaremixin):
def process_response(self, request, response):
# 新增響應頭
# 限制哪些網域名稱可以訪問,用逗號分隔,如果全部可使用'*'
response['access-control-allow-origin'] = '*'
# 限制攜帶的請求頭,用逗號分隔
response['access-control-allow-headers'] = 'content-type'
# 允許傳送的請求方式
response['access-control-allow-methods'] = 'delete, put'
return response
在settings註冊中介軟體
middleware = [
......
]
django前後端分離解決跨域
1.安裝虛擬環境 mkvirtualenv dj admin 環境名 若系統中存在多個python版本在環境名前需指定python版本 2.配置虛擬環境,安裝django pip install django 安裝依賴包 3.進入虛擬環境 workon 環境名退出虛擬環境 deactivate 檢視...
解決前後端分離的跨域問題
參考 跨域是網路安全領域的乙個專有名詞。簡單點理解就是某些操作越過了網域名稱的界限,訪問了別的網域名稱。如果指令碼可以自由訪問其他域,就會產生很多安全問題。什麼情況下會跨域?不同協議 不同網域名稱 不同埠 不同主機。什麼情況不是跨域?滿足網域名稱 協議 埠均相同的即不是跨域。解決方案 1 jsonp...
前後端分離專案,請求跨域解決
前端傳送請求,產生跨域問題 created 控制台報錯 在後端設定允許跨域請求 package com.demo.demobackend.config import org.springframework.context.annotation.bean import org.springframew...