同源策略
同源策略/SOP(Sameoriginpolicy)是一种保护措施,于1995年由Netscape公司引进电脑浏览器,目前所有JavaScript浏览器都使用这种安全措施。同源指的是“协议+网站域名+服务器端口”三者相同,即使两个不同的域名指向同一个IP地址,也不属于同源。源表示协议、网站域名和服务器端口。

处理跨域问题 – 在Django中
在Django中,要处理跨域问题,可以按以下步骤进行。
安装第三方库django-cors-headers
为了解决Django的跨域问题,首先需要安装第三方库django-cors-headers。
在settings.py中进行配置
在settings.py中添加“corsheaders.middleware.CorsMiddleware”,在SessionMiddleware和CommonMiddleware中间,并在INSTALLED_APPS里添加“corsheaders”。在中间件中再添加“corsheaders.middleware.CorsMiddleware”和“django.middleware.common.CommonMiddleware”。下面是一个设置示例:
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',#新增
]
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',
]
CORS_ALLOW_CREDENTIALS=True#允许携带cookie
CORS_ORIGIN_ALLOW_ALL=True#放行所有
CORS_ORIGIN_WHITELIST=('*',)#白名单
CORS_ALLOW_METHODS=(
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS=(
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
自定义中间件并在其中处理跨域问题
除了使用django-cors-headers库之外,还可以自己编写中间件,并在其中处理跨域问题,具体步骤如下:
- 注册一个中间件
- 在中间件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
处理跨域请求的步骤
跨域请求的处理步骤如下:
- 浏览器发送options请求
- 服务器在响应中返回许可信息
- 浏览器发送post请求
以上就是处理跨域问题的方法,希望对大家有所帮助。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5773.html
