HTTP 302

✍ dations ◷ 2024-09-20 14:27:52 #计算机错误,HTTP

302 Found,原始描述短语为 Moved Temporarily ,是HTTP协议中的一个状态码(Status Code)。可以简单的理解为该资源原本确实存在,但已经被临时改变了位置;换而言之,就是请求的资源暂时驻留在不同的URI下,故而除非特别指定了缓存头部指示,该状态码不可缓存。

对于服务器,通常会给浏览器发送HTTP Location头部来重定向到新的新位置。

根据定义,该响应代码的使用场景是,请求的资源暂时驻留在不同的URI下。

其特征被定义为:

客户端请求:

GET /blog HTTP/1.1Host: www.example.com

第一种服务器回应,不带缓存头:

HTTP/1.1 302 Temporary RedirectLocation: https://www-temp.example.org/

第二种服务器回应,带缓存头:

HTTP/1.1 302 FoundLocation: https://www-temp.example.org/Cache-control: private; max-age=600

服务器配置

这是一个例子,展示如

^www\.(.*)$ RewriteRule ^RewriteRule ^(.*)$ https://example.com/$1{{Dead link|date=2019年10月 |bot=InternetArchiveBot |fix-attempted=yes }}  

等价的 NGINX 配置方式:

location /old/url/ {    return 302 /new/url;}

这是使用 PHP 实现 HTTP 302 重定向的方式:<source lang="php"><?phpheader("HTTP/1.1 302 Found");header("Location: http://example.com/newpage.html");exit();?>'<

虽然 RFC 1945 和 RFC 2068 两个规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为 303响应 ,并且径自使用 GET 方式访问在 Location 中规定的 URI,而无视原先请求的方法,这是不规范的实现。

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

相关