HTTP 307

307 Temporary Redirect是HTTP协议中的一个状态码（Status Code）。可以理解为一个临时的重定向。

但该响应代码与302重定向有所区别的地方在于，收到307响应码后，客户端应保持请求方法不变向新的地址发出请求。

 引入
虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法，但是很多现存的浏览器在收到302响应时，直接使用GET方式访问在Location头部中规定的URI，而无视原先请求的方法。

因此，状态码307被添加了进来，用以明确服务器期待客户端进行何种反应。

特征
根据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();
?>

 用途 
 该响应码被用于Chrome，用来在本地对已经缓存的HSTS站点进行重定向。

 该响应码也常用于客户端发出PUT请求，但非上传具体文件时，服务器向客户端返回确认用的文本消息。

参见
 HTTP
 HTTP狀態碼
 URL重寫
 HTTP 301
 HTTP 302

参考文献

 外部連結 
 HTTP/1.1 Error codes in RFC 2616 
 RFC 1945 (HTTP 1.0)
 RFC 7231 (HTTP 1.1 的后续更新)
Category:HTTP
Category:计算机错误
Category:HTTP/1.1