热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DjangoVue跨域问题

一、Django中设置使用pip安装pipinstalldjango-cors-headerssetting.py中设置INSTALLED_APPS['corsh




一、Django中设置

使用pip安装

pip install django-cors-headers

setting.py中设置

INSTALLED_APPS = [
...
'corsheaders'
]
MIDDLEWARE = [
'corsheader.middleware.CorsMiddleware', # 尽量放在csrf前面
...
]

添加中间件,需要注意放的位置,在SessionMiddleware后面以及CommonMiddleware前面
在这里插入图片描述
添加配置参数


#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True # 允许携带COOKIE
CORS_ORIGIN_ALLOW_ALL = True #允许所有域名跨域,也可以在下面配置白名单
#白名单
# CORS_ORIGIN_WHITELIST = (
# 'http://127.0.0.1:8000',
# 'http://localhost:9528', #凡是出现在白名单中的域名,都可以访问后端接口
# )
#允许的请求头,不能用*,要写具体的请求头,不然Vue会跨域失败,在这里坑了我好久好久MD
CORS_ALLOW_HEADERS = (
'x-requested-with',
'content-type',
'accept',
'origin',
'authorization',
'x-csrftoken'
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)

二、Vue中设置

Vue中如果要携带COOKIEs,在配置axios的时候需要设置允许携带COOKIE请求,两种方法都可以。

1、axios设置default参数
// 允许携带COOKIE请求
axios.defaults.withCredentials = true
2、或者创建实例的时候设置withCredentials: true
//1. 创建新的axios实例,
const service = axios.create({
// 公共接口--这里注意后面会讲
baseURL: 'http://10.0.0.101:8000/api/v1/',
// 超时时间 单位是ms,这里设置了3s的超时时间
timeout: 30 * 1000,
withCredentials: true
})

跨域COOKIEs带不到后端的坑

参考 VUE 在谷歌浏览器中无法识别存储的COOKIE,以及跨域跳转

Firefox改COOKIE的SameSite预设,Mozilla鼓励开发者测网站兼容性


  • 我这里认证使用的COOKIEs-sessionid的方式,所以跨域请求的时候需要带上COOKIEs,但是配置了上面的参数后,请求可以访问到后端,但是COOKIEs在后端一直带不过去。找了好久,发现是浏览器SameSite这个配置的问题。

SameSite可以有下面三种值:
None
浏览器会在同站请求、跨站请求下继续发送COOKIEs,不区分大小写。
Strict
浏览器将只在访问相同站点时发送COOKIE。(在原有COOKIEs的限制条件上的加强,如上文“COOKIE的作用域” 所述)
Lax
在新版本浏览器中,为默认选项,Same-site COOKIEs 将会为一些跨站子请求保留,如图片加载或者frames的调用,但只有当用户从外部站点导航到URL时才会发送。如link链接

  • 原因是Chrome升级到80版本之后COOKIE的SameSite属性默认值由None变为Lax,这也就造成了一些访问跨域COOKIE无法携带的问题。当开发者明确配置SameSite为None,同时还设定Secure属性使用HTTPS连线,才能够让COOKIE可被跨站存取。

  • 过去浏览器预设允许COOKIE跨站存取,因此开发者不需要特别设定,但由于预设属性变更,现在网站开发者必须要明确设定SameSite与Secure属性,例如response.setHeader("Set-COOKIE", "HttpOnly;Secure;SameSite=None")过去仰赖旧预设的网站才能正确运作,当网站没有正确配置这些属性,则功能就可能故障。

  • 但是如果设置SameSite与Secure属性,那么就会强制需要https访问,还要再加上http转https的配置,实在是蛋疼。下面直接修改谷歌浏览器的SameSite配置来解决COOKIEs带不过去的问题

  • 但是不可能每个人都修改浏览器配置呀,所以在生产环境可以使用nginx转发,可以在前端的nginx上,加上一层代理,比如匹配/api/v1,把请求转到后端的服务上,这样就不会有跨域的问题了。
    在这里插入图片描述

1、打开chrome 输入 chrome://flags/ 搜索 SameSite by default COOKIEs

在这里插入图片描述

2、找到SameSite by default COOKIEs和COOKIEs without SameSite must be secure
在这里插入图片描述
3、将上面两项设置为 Disable
在这里插入图片描述
4、点击Relaunch

在这里插入图片描述

火狐浏览器设置跨域

1.进入火狐配置页进行设置

在地址栏输入:about:config

2.搜索”security.fileuri.strict_origin_policy”,并设置该项为false

3.重启浏览器



推荐阅读
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文探讨了Web API 2中特性的路由机制,特别是如何利用它来构建RESTful风格的URI。文章不仅介绍了基本的特性路由使用方法,还详细说明了如何通过特性路由进行API版本控制、HTTP方法的指定、路由前缀的应用以及路由约束的设置。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 优雅地记录API调用时长
    本文旨在探讨如何高效且优雅地记录API接口的调用时长,通过实际案例和代码示例,帮助开发者理解并实施这一技术,提高系统的可观测性和调试效率。 ... [详细]
  • Python网络编程:深入探讨TCP粘包问题及解决方案
    本文详细探讨了TCP协议下的粘包现象及其产生的原因,并提供了通过自定义报头解决粘包问题的具体实现方案。同时,对比了TCP与UDP协议在数据传输上的不同特性。 ... [详细]
  • 本文将详细介绍Fuel CMS如何基于CodeIgniter框架构建,包括其单入口模式的实现方式及关键配置文件的作用。通过分析本地环境中的index.php和.htaccess文件,我们将更好地理解Fuel CMS的核心架构。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 本文探讨了在Scrapy框架中如何从其他Python文件中访问和使用settings.py中定义的配置项。通过具体示例,介绍了两种有效的调用方式。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
author-avatar
欢不是欢7
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有