资讯专栏INFORMATION COLUMN

处理Djangocors跨域问题

89542767 / 472人阅读

  同源策略:同源策略/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要求,带上账号登录数据信息到后面,进行登录验证实际操作


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130275.html

相关文章

  • javascript跨域

    摘要:实现跨域的原理通过方式请求载入并执行一个文件,相当于通过的形式的导入一个外部的方法语法该函数是简写的函数,等价于在中,您可以通过使用形式的回调函数来加载其他网域的数据,如。将自动替换为正确的函数名,以执行回调函数。 更多详情见http://blog.zhangbing.club/Ja... 最近在项目开发的过程中遇到一些Javascript 跨域请求的问题,今天抽空对其进行总结一下,以...

    PingCAP 评论0 收藏0
  • postMessage处理iframe 跨域问题

    摘要:四传递信息给父页面参考跨域子页面传给父页面父页面代码崔涣测试父页面参数中有属性,就是父窗口发送过来的数据把父窗口发送过来的数据显示在子窗口中。五简单分析和安全问题传送过来的信息如下图,几乎包含了所有应该有的信息。 背景:由于同源策略存在,javascript的跨域一直都是一个棘手的问题。父页面无法直接获取iframe内部的跨域资源;同时,iframe内部的跨域资源也无法将信息直接传递给...

    cooxer 评论0 收藏0
  • 那些年曾谈起的跨域

    摘要:在中,在不同的域名下面进行数据交互,就会遇到跨域问题,说到跨域首先要从同源说起,浏览器为了提供一种安全的运行环境,各个浏览器厂商协定使用同源策略。在上面说过是不受同源策略限制的,但是出于安全原因,浏览器限制从脚本内发起的跨源请求。 对于前端开发来说跨域应该是最不陌生的问题了,无论是开发过程中还是在面试过程中都是一个经常遇到的一个问题,在开发过程中遇到这个问题的话一般都是找后端同学去解决...

    galois 评论0 收藏0
  • 使用Spring Security中遇到的Preflight请求和跨域问题

    摘要:首先遇到的就是跨域问题,但是在携带请求过程中出现了服务端获取不到情况。浏览器将请求分成两类简单请求和非简单请求。而浏览器对这两种请求的处理是不一样的。 背景 在一个前后端分离开发的项目中,使用SpringSecurity做安全框架,用JWT来实现权限管理提升RESTful Api的安全性。首先遇到的就是跨域问题,但是在携带jwt请求过程中出现了服务端获取不到jwt情况。 跨域问题 在开...

    shengguo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<