本文主要内容非原创!引用自文末「本文参考」项
问题
发现一个 POST 请求通过 301 重定向到新的请求,新的请求却变成了 GET,且请求报文清空了!
原因
不同类型的重定向映射可以划分为三个类别:
- 永久重定向
- 临时重定向
- 特殊重定向
永久重定向
这种重定向操作是永久性的。它表示原 URL 不应再被使用,而选用新的 URL 替换它。搜索引擎机器人、RSS 阅读器以及其他爬虫将更新资源原始的 URL。
状态码 | 状态文本 | 处理方法 | 典型应用场景 |
---|---|---|---|
301 | Moved Permanently | GET 方法不会发生变更。其他方法有可能会变更为 GET 方法。[1] | 网站重构。 |
308 | Permanent Redirect | 方法和消息主体都不发生变化。 | 使用用于非 GET 链接/操作重组网站。 |
[1] 该规范无意使方法发生改变,但在实际应用中用户代理会更改其方法。308
状态码被创建用来消除在使用非 GET
方法时行为的歧义。
临时重定向
有时候请求的资源无法从其标准地址访问,但是却可以从另外的地方访问。在这种情况下,可以使用临时重定向。
搜索引擎和其他爬虫不会记录新的、临时的 URL。在创建、更新或者删除资源的时候,临时重定向也可以用于显示临时性的进度页面。
状态码 | 状态文本 | 处理方法 | 典型应用场景 |
---|---|---|---|
302 | Found | GET 方法不会发生变更。其他方法有可能会变更为 GET 方法。[2] | 由于不可预见的原因该页面暂不可用。 |
303 | See Other | GET 方法不会发生变更,其他方法会变更为 GET 方法(消息主体丢失)。 | 用于 PUT 或 POST 请求完成之后重定向,来防止由于页面刷新导致的操作的重复触发。 |
307 | Temporary Redirect | 方法和消息主体都不发生变化。 | 由于不可预见的原因该页面暂不可用。当站点支持非 GET 方法的链接或操作的时候,该状态码优于 302 状态码。 |
[2] 该规范无意使方法发生改变,但在实际应用中用户代理会改变其方法。307
状态码被创建用来消除在使用非 GET
方法时行为的歧义。
特殊重定向
304
(Not Modified)会使页面跳转到本地的缓存副本中(可能已过时),而 300
(Multiple Choice)则是一种手动重定向:将消息主体以 Web 页面形式呈现在浏览器中,列出了可能的重定向链接,用户可以从中进行选择。
状态码 | 状态文本 | 典型应用场景 |
---|---|---|
300 | Multiple Choice | 不常用:所有的选项在消息主体的 HTML 页面中列出。鼓励在 Link 标头中加入机器可读的 rel=alternate |
304 | Not Modified | 发送用于重新验证的条件请求。表示缓存的响应仍然是新的并且可以使用。 |
发表评论