HTTP 重定向详解

HTTP 重定向详解

背景

最近在做HTTP组件表单上传的需求,遇到一个疑问,当Post表单时,服务器端返回重定向状态码,重定向以后的请求是转换成GET,还是继续使用POST。

重定向状态码

以下内容主要来自于Mozilla,有兴趣可以看下原文

状态码说明重定向处理方法
301 Moved Permanently永久重定向GET方法不变,其他无明确规定
302 Found临时重定向GET方法不变,其他无明确规定
303 See Other对POST/PUT请求进行重定向,防止刷新页面后重新提交请求重定向后变为GET请求
307 Temporary Redirect临时重定向重定向后使用原来的Method和Body
308 Permanent Redirect永久重定向重定向后使用原来的Method和Body
  • 关于301/302

虽然 RFC 1945 和 RFC 2068 规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器在收到302响应时,直接使用GET方式访问在 Location 头部中规定的 URI,而无视原先请求的方法。

因此,RFC 7231 增加了 状态码307,规定了重定向以后继续使用原来的method和body。

重定向规则

根据RFC 2616 定义:

  1. 响应实体必须带有一个HTTP Location头部来指示新地址。
  2. 如果一个客户端有链接编辑能力,其应当把所有的引用链接重定向到新的URL上。
  3. 除非带有 Cache-Control 或 Expires 头部,否则该响应不能被缓存。
  4. 除非请求方法是 HEAD, 否则响应实体应该包含一个小型的超文本,标注一个超链接到新的URL。
  5. 如果是除了 GET 和 HEAD 之外的请求方法,客户端必须在重定向之前询问用户。

具体实现方法

由于作者实现的是一个底层组件,不具备重定向时询问用户的能力。因此采用的方案是:

  1. 301/302/303重定向时转为GET请求
  2. 307/308重定向时保持原来的请求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值