记一次请求Django接口时URL结尾少了斜杠的问题

本文记录了一次由于Django的APPEND_SLASH设置导致URL重定向,进而使移动端接口请求丢失登录态的问题。分析了HTTP重定向的规范,解释了为何在某些情况下客户端不会自动携带认证信息,并提出了避免此类问题的建议。
摘要由CSDN通过智能技术生成

事情是这样的。移动端的同事在调用Django接口时,明明已经有登录态,却返回未登录。于是app以为是token过期,刷新token再请求,再提示未登录,如此反复,造成了死循环。

查看日志,发现是URL后面少了斜杠,由于Django中设置了APPEND_SLASH=True, 当URL后面缺少斜杠时,会自动拼上斜杠,并重定向。

那为什么重定向之后,登录态就丢失了呢?更奇怪的是看日志发现原本是一个DELETE方法的请求,重定向后变成了GET请求。

原因是这样的。
我们的凭证是放在HTTP的header的Authorization里面。而重定向的时候这个数据丢失了。

看了一下RFC 2616,里面写到

The new permanent URI SHOULD be given by the Location field in the
response. Unless the request method was HEAD, the entity of the
response SHOULD contain a short hypertext note with a hyperlink to
the new URI(s).

If the 301 status code is received in response to a request other
than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might
change the con

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值