HTTP 307
外觀
HTTP/HTTPS |
---|
版本 |
請求方法 |
報文主體 |
頭欄位 |
狀態碼 |
相關主題 |
307 Temporary Redirect是HTTP協定中的一個狀態碼(Status Code)。可以理解為一個臨時的重新導向[1]。
但該響應代碼與302重新導向有所區別的地方在於,收到307響應碼後,客戶端應保持請求方法不變向新的地址發出請求。[2]
引入
[編輯]雖然RFC 1945和RFC 2068規範不允許客戶端在重新導向時改變請求的方法,但是很多現存的瀏覽器在收到302響應時,直接使用GET方式訪問在Location頭部中規定的URI,而無視原先請求的方法。[3]
因此,狀態碼307被添加了進來,用以明確伺服器期待客戶端進行何種反應。[4]
特徵
[編輯]根據RFC 2616定義:
- 響應實體必須帶有一個HTTP Location頭部來指示新地址。
- 如果一個客戶端有連結編輯能力,其應當把所有的參照連結重新導向到新的URL上。
- 除非帶有Cache-Control或Expires頭部,否則該響應不能被快取。
- 除非請求方法是HEAD,否則響應實體應該包含一個小型的超文字,標註一個超連結到新的URL。
- 如果是除了GET和HEAD之外的請求方法,客戶端必須在重新導向之前詢問用戶。
範例
[編輯]以GET方式請求
[編輯]GET /index.php HTTP/1.1
Host: www.example.org
伺服器回應:
HTTP/1.1 307 Temporary Redirect
Location: https://www.example.org/
伺服器組態
[編輯]這是一個例子,展示如何使用Nginx返回307重新導向:
location /old/url/ { return 307 /new/url; }
這是使用PHP實現307重新導向的方式:
<?php
header("HTTP/1.1 307 Temporary Redirect");
header("Location: http://example.com/newpage.html");
exit();
?>
用途
[編輯]- 該響應碼也常用於客戶端發出PUT請求,但非上載具體檔案時,伺服器向客戶端返回確認用的文字訊息。[2]
參見
[編輯]參考文獻
[編輯]- ^ HTTP/1.1: Status Code Definitions. [2017-06-30]. (原始內容存檔於2010-03-16).
- ^ 2.0 2.1 307 Temporary Redirect. Mozilla Developer Network. [2017-07-04]. (原始內容存檔於2017-07-02).
- ^ Reference of method redirect_to in Ruby Web Framework "Ruby on Rails". It states: The redirection happens as a "302 Moved" header unless otherwise specified.. [2012-06-30]. (原始內容存檔於2012-07-05).
- ^ Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content, Section 6.4. IETF. [2014-06-12]. (原始內容存檔於2017-05-25).
- ^ Understanding the "Fake 307" redirects in Chrome. cemper.academy. [2017-07-04]. (原始內容存檔於2017-07-13).
外部連結
[編輯]- HTTP/1.1 Error codes in RFC 2616(頁面存檔備份,存於互聯網檔案館) (英文)
- RFC 1945 (HTTP 1.0)
- RFC 7231 (HTTP 1.1 的後續更新)