2012-07-22 63 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