POST后,我应该做一个302或303重定向?
Web应用程序的常见方案是在修改数据库的POST后重定向。 就像在用户创建数据库对象后重定向到新创建的数据库对象一样。
似乎大多数网络应用都使用302重定向,但如果您希望重定向中指定的网址可以通过GET获取,那么根据规范303看起来是正确的。 从技术上讲,使用302,浏览器应该使用与原始URL相同的方法来获取指定的URL,这将是POST。 大多数浏览器不这样做。
302 - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3
303 - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4
那么我应该使用302还是303?
依靠。
在HTTP1.1中添加了303和307个响应。
因此严格遵守HTTP1.1 RFC的客户端代理应该可以使用303响应。
但是可能有代理不完全符合或符合HTTP1.0,并且无法处理303。
所以为了确保你的应用程序的响应能够被大多数客户端实现正常处理,我认为302是最安全的选择。
摘自RFC-2616:
注意:许多pre-HTTP / 1.1用户代理不理解303状态。 在考虑与这些客户端的互操作性时,可能会使用302状态码,因为大多数用户代理对302响应作出反应,如303所述。
正确的是303。
我使用它,并没有发现与Netscape 4(1998年, 17年前发布)相比更新的UA的任何兼容性问题。
如果您使用302,则冒着冒险的风险,UA将重新发送POST到新的URL而不是切换到GET。
尽管如此,如果您担心HTTP / 1.0客户端(不支持虚拟主机,并且可能无法访问您的页面),那么您应该在303响应的主体中包含带有链接到新页面的HTML像Apache这样的网络服务器就已经这样做了)
在大多数服务器端语言中,默认重定向机制使用302:
response.sendRedirect(..)
使用302 response.Redirect(..)
使用302 header("Location: ..")
使用302 redirect_to
使用302 所以我更喜欢这个,而不是手动设置状态和标题。
链接地址: http://www.djcxy.com/p/7925.html上一篇: After a POST, should I do a 302 or a 303 redirect?
下一篇: What's an appropriate HTTP status code to return by a REST API service for a validation failure?