Django DRF部署Heroku后浏览器无法设置Cookie但Postman运行正常求助
问题修复方案
- 修正ALLOWED_HOSTS配置
现有配置中填写了带http前缀的地址,不符合Django配置规则,仅需填写域名或IP即可,修改为:ALLOWED_HOSTS = ['127.0.0.1','xxxxxxx.herokuapp.com'] - 调整Cookie属性适配Heroku HTTPS环境
Heroku默认提供HTTPS访问,跨站场景下Cookie需要满足以下要求才能被浏览器正常存储:- 将
AUTH_COOKIE_SECURE设置为True,仅在HTTPS请求下携带Cookie - 将
AUTH_COOKIE_SAMESITE设置为None,允许跨站请求携带Cookie,注意该配置必须和Secure=True配合使用,否则浏览器会直接拒收Cookie
- 将
- 新增反向代理SSL识别配置
Heroku使用反向代理转发请求,Django默认无法识别原始请求的HTTPS协议,需要新增配置让Django正确识别协议类型,避免Cookie属性设置错误:SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') - 检查前端请求配置
前端发送跨域请求时必须开启凭证携带配置,否则浏览器会直接忽略响应中的Set-Cookie头:- 若使用axios:添加配置项
withCredentials: true - 若使用原生fetch:添加配置项
credentials: 'include'
- 若使用axios:添加配置项
补充说明:Postman测试正常是因为Postman不会强制执行浏览器的跨站Cookie安全校验规则,所以二者表现不一致属于正常现象。
内容的提问来源于stack exchange,提问作者Code Cracker
相关产品推荐
相关产品推荐

