2012-07-22 39 views
4

在我的MVC框架中,我有时在表单提交后重定向。假设你发布一个表单到/ example/input。表单提交后正确的HTTP 1.1头响应代码

我想在PHP中添加适当的标题代码和说明文字,例如: header('HTTP/1.1 404 Not Found');

1)您的输入包含错误。你留在/ example/input页面并再次获取表单,标记错误等。哪个HTTP 1.1。代码和文本将是正确的发送重定向指令?

2)您的输入正常,元素已保存,您将通过Header('Location: ...')重定向到/ example/success。哪个HTTP 1.1。代码和文本在这里是适当的吗?

3)PHP代码由于错误配置,缺少包含文件,损坏的数据库连接或其他有时会出错的错误而引发错误。哪个HTTP 1.1。代码和文本在这里是适当的吗?

我在这里查看了代码:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 数字200显示正确的是1),而数字301/302显示正确的是2),数字500是3)。但是,在所有三种情况下,我发现上述链接中的代码后面的标题/解释与我上面描述的情况不完全吻合。我应该选择其他代码/文本吗?

+0

你最好提交表单到'/ example/input' – 2012-07-22 03:59:36

回答

3

第一种情况和第二种情况描述了相同情况的变体:您通过POST提交表单,服务器处理它并将客户端重定向到成功页面或返回到表单。对于这两种情况,“303 See Other”是正确的回应。在服务器正确处理POST请求后,这是使用GET方法将客户端重定向到资源的正确方法。根据该规范:

此方法存在主要是为了允许POST活化 脚本输出给用户代理重定向到所选择的资源。

对于案例3,500代码通常适用于大多数严重错误。

+0

事实上,案例1不会重定向,因为您发布的错误显示在相同的URL上。只有情况2实际执行重定向(到成功页面)。 – preyz 2012-07-29 18:12:31

+0

理想情况下,将数据发布到表单实际上会导致重定向。看到这里:http://en.wikipedia.org/wiki/Post/Redirect/Get – 2012-07-31 20:19:42

+0

我已经接受你的答案在所有提交严格执行PRG概念的条件下。然而,我并不认为这是必要的,因为如果表单有错误,那么POST将不会生成数据库条目并响应包含错误表单的页面。但是,如果表单没有问题,则根据链接的PRG概念使用重定向,以避免重复输入。 – preyz 2012-08-01 13:12:12

1

在我的理解200代码是正确的,如果你的PHP成功执行。所以,应该照顾1和2.

对于3,如果发生致命错误,PHP已经发送500代码。

为了更多地解释2,当资源不再位于请求的URL时,这些300是用于。所以你会将它们重定向到新的或正确的位置。在你的情况下,资源在那里,所以你不需要300代码。

+0

这不一定是正确的。 300个代码可处理所有类型的重定向,并且尽管您对致命错误是正确的,但并非所有OP描述的情况都会导致致命错误。 – 2012-07-22 04:35:13

+0

你是对的。我错过了300个错误的标记。谢谢。 – Xesued 2012-07-22 04:45:18