我应该在提交表单后使用 301、302 还是 303 重定向?

Posted

技术标签:

【中文标题】我应该在提交表单后使用 301、302 还是 303 重定向?【英文标题】:Should I use a 301, 302, or 303 redirect after form submission? 【发布时间】:2016-09-17 04:06:49 【问题描述】:

我正在用 php 创建一个简单的问答留言板。当有人提交问题的答案时,php 脚本会将用户重定向到原始问题,并在页面底部显示更新的答案。

在这种情况下,使用 301、302 或 303 重定向会更好吗?我在考虑 302 重定向,因为重定向不是永久的或静态的——重定向取决于发送到提交脚本的参数。但是,我也看到某些表单也推荐了 303。

【问题讨论】:

【参考方案1】:

对于这种情况,正确的重定向应该是 303 重定向,因为您是从表单提交(可能是 POST 请求)重定向到查看页面(应该是 GET 请求)并且它是临时重定向(即重定向可能会根据参数而改变)。

这是由标准支持的:

可以在不同的 URI 下找到对请求的响应,并且应该在该资源上使用 GET 方法检索。此方法的存在主要是为了允许 POST 激活脚本的输出将用户代理重定向到选定的资源。新的 URI 不是原始请求资源的替代引用。 303 响应不得缓存,但对第二个(重定向)请求的响应可能是可缓存的。

【讨论】:

谢谢。经过一些研究,包括您引用的标准,我继续进行 303 重定向。

以上是关于我应该在提交表单后使用 301、302 还是 303 重定向?的主要内容,如果未能解决你的问题,请参考以下文章

在Laravel中提交POST表单后出现302错误

Json 给 301 永久移动

使用 PHP 进行 301 或 302 重定向

http 301 302 303 307 308 傻傻分不清

301,302,303,307重定向区别

react-router 如何使用 redirectLocation 或 301 或 302 状态