美文网首页
django 解决跨域问题

django 解决跨域问题

作者: 不吃鱼的猫_8e95 | 来源:发表于2018-06-22 23:45 被阅读0次

由于安全问题,浏览器会有一个同源策略,对于不同源的站点之间的请求会做限制(跨域限制是浏览器的原因,而不是服务器的原因)

同源策略

同源指域名(IP),协议,端口都相同,不同源的客户端脚本(javascript)在没有授权的情况下,不能读写对方的资源。

跨域的判定流程

  • 浏览器先根据同源策略对前端页面和后台交互地址做匹配,若同源,则直接发送数据请求;若不同源,则发送跨域请求。
  • 服务器解析程序收到浏览器跨域请求后,根据自身配置返回对应文件头。若未配置过任何允许跨域,则文件头里不包含Access-Control-Allow-origin字段,若配置过域名,则返回Access-Control-Allow-origin+ 对应配置规则里的域名的方式。
  • 浏览器根据接受到的http文件头里的Access-Control-Allow-origin字段做匹配,若无该字段,说明不允许跨域;若有该字段,则对字段内容和当前域名做比对,如果同源,则说明可以跨域,浏览器发送该请求;若不同源,则说明该域名不可跨域,不发送请求

django解决跨域请求的问题

  • 安装django-cors-headers
pip install django-cors-headers
  • 配置settings.py文件
INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
 ] 

MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware', # 注意顺序
    ...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
    '*'
)

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',
)

相关文章

网友评论

      本文标题:django 解决跨域问题

      本文链接:https://www.haomeiwen.com/subject/ijfrkftx.html