AngularJS发送的Cookie
标题如下:
_ga=redacted; sessionid=redacted; ; csrftoken=redacted
额外的分号可能不符合HTTP。
这个问题有几个“移动”部分。
Angular $ http POST请求失败,出现403错误,“CSRF失败:CSRF cookie未设置。”
CSRF Cookie和标头肯定会在Chrome中的开发标签中验证的请求中设置。
Chrome会在请求中显示COOKIE标题文字:
Cookie:_ga =编辑;的sessionid =节录; ; csrftoken =节录
我已经做了足够的步骤通过Django代码看到上面的原始cookie字符串进入请求的HTTP_COOKIE
字段中的Django应用程序,但csrftoken
cookie从未生成它进入request.COOKIE
。 Django的cookie文本解析器被原始cookie文本中的额外分号抛弃。我不知道解析器是否已损坏或AngularJS是否已损坏,因为我不知道原始cookie字符串的官方语法要求。但最简单的解决方案是找出如何让Angular删除那个'空白'cookie。
Django 1.8.2,AngularJS 1.6.7& Python 2.7.10
这种情况发生在macOS上的开发环境中,而不是我的登台系统,这是一个Linux机箱。
更新:
感谢@xyres的帮助,我通过升级到Django 1.8.15解决了这个问题。但是AngularJS不应该发送这个格式错误的cookie字符串,对吗?如何修复AngularJS客户端?