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 ()