• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

3 django cors 跨域

开发技术 开发技术 1周前 (05-04) 6次浏览

1 浏览器请求

浏览器将CORS请求分成两类:
1 简单请求(simple request)
2 非简单请求(not-so-simple request)

如何定义简单请求和非简单请求?

  只要同时满足以下两大条件,就属于简单请求。

  1 请求方法是以下三种方法之一:
  HEAD
  GET
  POST

  2 HTTP的头信息不超出以下几种字段:

  Accept
  Accept-Language
  Content-Language
  Last-Event-ID
  Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
  凡是不同时满足上面两个条件,就属于非简单请求


  简单请求和非简单请求的区别?

  1 简单请求:一次请求
  2 非简单请求:两次请求,在发送数据之前会先发一次请求用于做“预检”,只有”预检”通过后才再发送一次请求用于数据传输。


  什么是预检?

 预检其实做检查,检查如果通过则允许传输数据,检查不通过则不再发送真正想要发送的消息。请求方式:OPTIONS


 如何预检?

  1 如果复杂请求是PUT等请求,则服务端需要设置允许某请求,否则预检不通过
  Access-Control-Request-Method
  2 如果复杂请求设置了请求头,则服务端需要设置允许某请求头,否则预检不通过
  Access-Control-Request-Headers

 

2 django-cors-headers

1 安装
pip install django-cors-headers

2 setting中设置cors
- 添加app
INSTALLED_APPS = [
 'corsheaders',
]
- 设置中间件
MIDDLEWARE_CLASSES = [
 'corsheaders.middleware.CorsMiddleware',
 'django.middleware.common.CommonMiddleware',
]
- 设置可访问域名
CORS_ORIGIN_WHITELIST = (
 '127.0.0.1:8080',
 'localhost:8080',
)
或 CORS_ORIGIN_ALLOW_ALL = True // 全部域名均支持跨域
- 是否支持cookie
CORS_ALLOW_CREDENTIALS = False
- 支持的方法
CORS_ALLOW_METHODS = (
 'DELETE',
 'GET',
 'OPTIONS',
 'PATCH',
 'POST',
 'PUT',
 'VIEW',
)
- 支持的头信息
CORS_ALLOW_HEADERS = (
 'XMLHttpRequest',
 'X_FILENAME',
 'accept-encoding',
 'authorization',
 'content-type',
 'dnt',
 'origin',
 'user-agent',
 'x-csrftoken',
 'x-requested-with',
 'Pragma',
)
- options缓存时间
CORS_ALLOW_MAX_AGE = 86400 // 默认一天时间(单位:秒)
- 自定义响应头
CORS_EXPOSE_HEADERS = []

 


程序员灯塔
转载请注明原文链接:3 django cors 跨域
喜欢 (0)