HTTP 307

维基百科,自由的百科全书
跳转至: 导航搜索

307 Temporary RedirectHTTP协议中的一个状态码(Status Code)。可以理解为一个临时的重定向[1]

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

引入[编辑]

虽然 RFC 1945RFC 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();
?>


用途[编辑]

  • 该响应码被用于Chrome,用来在本地对已经缓存的HSTS站点进行重定向。[5]
  • 该响应码也常用于客户端发出PUT请求,但非上传具体文件时,服务器向客户端返回确认用的文本消息。[2]

参见[编辑]

参考文献[编辑]

  1. ^ HTTP/1.1: Status Code Definitions. 
  2. ^ 2.0 2.1 307 Temporary Redirect. Mozilla Developer Network. 
  3. ^ 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]. 
  4. ^ Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content, Section 6.4. IETF. [2014-06-12]. 
  5. ^ Understanding the "Fake 307" redirects in Chrome. cemper.academy. 

外部連結[编辑]