HTTP Status Code 307、308 的作用

HTTP Status Code 3xx 都是做重新導向的作用:

  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 307 Temporary Redirect
  • 308 Permanent Redirect

此篇主要是討論 307、308 為主,其他就簡單說明一下帶過~~

HTTP Status Code 307、308 的作用

HTTP 301、302、307、308 的差異:

就 HTTP Status 狀態的意義上來說:

  • 301 = 308
  • 302 = 307

在實際運作上的差異:

  • 只允許 redirect POST to GET
    • Temporary Redirect:302
    • Permanent Redirect:301
  • 允許 redirect POST to POST
    • Temporary Redirect:307
    • Permanent Redirect:308
  • 簡單說,若是想要將 POST 值往下一頁帶,就需要用 307 和 308 (於 HTTP 代表意義同 302 和 301)

下述摘錄自此篇:HTTP 307 - 維基百科,自由的百科全書

  • 307 Temporary Redirect 是 HTTP協定 中的一個狀態碼(Status Code)。可以理解為一個臨時的重新導向
  • 但該回應代碼與302重新導向有所區別的地方在於,收到307回應碼後,客戶端應保持請求方法不變向新的位址發出請求。

這邊可以寫個簡單的程式做測試:

307.php

<?php                                                                                                                                                                  
header("HTTP/1.1 307 Temporary Redirect");                                                                                                                                   
// header("HTTP/1.1 302");                                                                                                                                                   
header("Location: https://localhost/post.php");                                                                     
exit();                                                                                                                                                                      
?>

post.html

<form action="307.php" method="post">                                                                                                                                     
    <input type="text" name="abc" value="test">                                                                                                                           
    <input type="submit">                                                                                                                                                 
</form>

post.php

print_r($_POST);
print_r($_GET);
print_r($_REQEST);

打開 header HTTP 307 的 輸出結果:(POST、REQUEST 會有值)

  • POST Array ( [abc] => test )
  • GET Array ( )
  • REQUEST Array ( [abc] => test )

打開 header HTTP 302 的 輸出結果: (POST、GET、REQUEST 都是空值)

  • POST Array ()
  • GET Array ()
  • REQUEST Array ()

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料