Kyl*_*yle 51 http-status-codes http-status-code-302
Web应用程序的常见方案是在修改数据库的POST后重定向.就像在用户创建数据库对象后重定向到新创建的数据库对象一样.
似乎大多数Web应用程序使用302重定向,但如果您希望使用GET获取重定向中指定的URL,则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?
Kor*_*nel 57
正确的是303.
我使用它并没有发现任何与Netscape 4(1998年,17年前发布)相比更新的UAs的兼容性问题.
如果您使用302,那么您将面临UA将POST重新发送到新URL而不是切换到GET的风险.
尽管如此,如果您担心HTTP/1.0客户端(它们不支持vhost并且可能无法访问您的页面),那么您应该包含HTML链接到303响应正文中的新页面(像Apache这样的网络服务器已经这样做了.
Cra*_*lus 21
要看.
在HTTP1.1中添加了303和307响应.
因此,严格遵守HTTP1.1 RFC的客户端代理应该可以使用303响应.
但是可能存在不完全符合或符合HTTP1.0并且无法处理303的代理.
因此,为了确保大多数客户端实现可以正常处理应用程序的响应,我认为302是最安全的选择.RFC-2616的
摘录:
注意:许多pre-HTTP/1.1用户代理不了解303状态.当考虑与这样的客户端的互操作性时,可以替代地使用302状态代码,因为大多数用户代理对302响应做出反应,如针对303所描述的.
在大多数服务器端语言中,默认重定向机制使用302:
response.sendRedirect(..)使用302response.Redirect(..)使用302header("Location: ..")使用302redirect_to使用302所以我更喜欢这个,而不是手动设置状态和标题.
从理论上讲,您(以及全世界)应该使用303。而且,大多数浏览器对302的反应就像对303的反应一样。因此,总的来说,发送302或303似乎无关紧要。在为303规范提供的链接中,有一个有趣的注释:
注意:许多HTTP / 1.1之前的用户代理不了解303状态。如果需要考虑与此类客户端的互操作性,则可以改用302状态代码,因为大多数用户代理都会对302响应做出反应,如此处针对303所述。
请注意-HTTP / 1.1之前的用户代理,这一点很重要,因此也许前一阵子很重要,但我不认为现在是这种情况。
因此,总而言之,这取决于您(我敢打赌,您希望浏览器永远不会针对302个状态更改其行为,因为担心会破坏用户的互联网)。
当提供 POST 请求创建的新资源的位置时,201(“已创建”)是适当的响应。
HTTP/1.1:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.2
Atom 发布协议:https://www.rfc-editor.org/rfc/rfc5023#section-5.3
但这确实意味着网络浏览器可能不会重定向到新的 URL;用户必须点击链接才能到达新项目(此链接可以在响应正文以及 Location 标头中提供)。