CORS - Cross-origin resource sharing - 跨域资源共享

1,什么是CORS

​ 允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制

2,特点

​ 1,浏览器自动完成(在请求头中加入特殊头 或 发送特殊请求)

​ 2,服务器需要支持(响应头中需要有特殊头)

  • 跨域它分为两种请求:
    1. 简单请求(Simple requests)
    2. 预检请求(Preflighted requests)

满足以下全部条件的请求为 简单请求

​ 1,请求方法如下:

​ GET or HEAD or POST

​ 2,请求头仅包含如下:

​ Accept

​ Accept-Language

​ Content-Language

​ Content-Type

​ 3,Content-Type 仅支持如下三种:

​ application/x-www-form-urlencoded

​ multipart/form-data

​ text/plain

不满足以上任意一点的请求都是 预检请求

3、简单请求发送流

1,请求

​ 请求头中 携带 Origin,该字段表明自己来自哪个域

​ 2,响应

​ 如果请求头中的Origin在服务器接受范围内, 则返回如下头

响应头作用备注
Access-Control-Allow-Origin服务器接受得域
Access-Control-Allow-Credentials是否接受Cooike可选
Access-Control-Expose-Headers默认情况下,xhr只能拿到如下响应头:Cache-Control,Content-Language,Content-Type,Expires,Last-Modified;如果有需要获取其他头,需在此指定可选

如果服务器不接受此域,则响应头中不包含 Access-Control-Allow-Origin

4,预检请求发送流程

​ 1,OPTION 请求发起,携带如下请求头

请求头作用备注
Origin表明此请求来自哪个域必选
Access-Control-Request-Method此次请求使用方法必选
Access-Control-Request-Headers此次请求使用的头必选

2,OPTION 接受响应阶段,携带如下响应头

响应头作用备注
Access-Control-Allow-Origin同简单请求必选
Access-Control-Allow-Methods告诉浏览器,服务器接受得跨域请求方法必选
Access-Control-Allow-Headers返回所有支持的头部,当request有
‘Access-Control-Request-Headers’时,该响应头必然回复
必选
Access-Control-Allow-Credentials同简单请求可选
Access-Control-Max-AgeOPTION请求缓存时间,单位s可选

3,主请求阶段

请求头作用备注
Origin表明此请求来自哪个域

4,主请求响应阶段

响应头作用备注
Access-Control-Allow-Origin当前服务器接受得域
这里的预检请求与简单请求相比,预检请求会比简单请求多走一步,在进行cors跨域的时候,会先进行options请求,先与服务器进行商量,进行沟通,看那边是否支持跨域,会携带相应的请求头(具体看上面的表格),然后服务器会返回相应的响应头(具体以上表格),然后再进行主请求的发送响应阶段

5,Django支持配置和安装

django-cors-headers官网 https://pypi.org/project/django-cors-headers/

直接pip 将把django升级到2.0以上,建议用离线安装方式
配置流程

1,INSTALLED_APPS 中添加 corsheaders
		2,MIDDLEWARE 中添加 corsheaders.middleware.CorsMiddleware
		   位置尽量靠前,官方建议 ‘django.middleware.common.CommonMiddleware’ 上方
		3,CORS_ORIGIN_ALLOW_ALL  布尔值  如果为True 白名单不启用
		4,CORS_ORIGIN_WHITELIST =[
			"https://example.com"
		]
		5, CORS_ALLOW_METHODS = (
				'DELETE',
				'GET',
				'OPTIONS',
				'PATCH',
				'POST',
				'PUT',
				)
		6, CORS_ALLOW_HEADERS = (
				'accept-encoding',
				'authorization',
				'content-type',
				'dnt',
				'origin',
				'user-agent',
				'x-csrftoken',
				'x-requested-with',
			)
		#这个是设置支持跨域的有效时间
		7, CORS_PREFLIGHT_MAX_AGE  默认 86400s
		#设置给浏览器的另外的响应头
		8, CORS_EXPOSE_HEADERS  []
		#设置跨域的cookie要不要,默认不要
		9, CORS_ALLOW_CREDENTIALS  布尔值, 默认False
    
    离线安装:
    1、tar -zxvf django-cors-headers-3.0.2.tar.gz
    2、cd django-cors-headers-3.0.2
    3、sudo python3 setup.py install

下载django-cors-headers-3.0.2.tar.gz 已上传

django-cors-headers-3.0.2.tar.gz

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rebirth-LSS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值