处理Djangocors跨域问题
AI 摘要 / TL;DR
处理Djangocors跨域问题 来源: https://www.ucloud.cn/yun/130275.html 作者: 89542767 发布日期: 发布于2023 01 13 15:44 同源策略:同源策略/SOP(Sameoriginpolicy)是一类承诺,由Netscape公司1995年引进电脑浏览器,这
来源: https://www.ucloud.cn/yun/130275.html 作者: 89542767 发布日期: 发布于2023-01-13 15:44
同源策略:同源策略/SOP(Sameoriginpolicy)是一类承诺,由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进行封装
defprocess_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"]="*"
returnresponse
跨域请求进行步骤为
1、电脑浏览器会初次先传送options要求了解后面是不是准许跨域请求,后面查看授权管理中是否存在这俩网站域名
2、如果网站域名在授权管理中即在回应结论中告之电脑浏览器准许跨域请求
3、电脑浏览器再次传送post要求,带上账号登录数据信息到后面,进行登录验证实际操作
综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。