HTTP 协议状态码-3XX

3XX 代表重定向,代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。

1. 300 Multiple Choices

有多个重定向的值,需要客户端自己选择, Location 的值是服务端建议的值。

HTTP/1.1 300 Multiple Choices
Access-Control-Allow-Headers: Content-Type,User-Agent
Access-Control-Allow-Origin: *
Link: </foo> rel="alternate"
Link: </bar> rel="alternate"
Content-Type: text/html
Location: /foo

2. 301 Moved Permanently

请求的资源已经永久性的转移了,新资源 URI 在头部 Location指明,这时候如果浏览器有书签,或者请求地址的缓存,最好都能替换成 Location 对应的值。

HTTP/1.1 301 Moved Permanently
Location: https://www.imocc.com/http/301-moved-permanently

3. 302 Found

301 相似,只是 302 代表的资源转移地址是临时的。

4. 303 See Other

303 状态码和 302 状态码有着相同的功能,但 303 状态码明 确表示客户端应当采用 GET 方法 请求 Location 的地址获取资源。

如果是以 POST 访问某个请求,返回 303 ,此时应该换成 GET 方法去请求新地址。

5. 304 Not Modified

一般是在有缓存的情况下,客户端发起资源获取请求,服务端判断之前的资源未修改过,可以继续使用缓存的资源。经常客户端请求的头部会带上 If-None-Match If-Modified-Since If-Match 等带有条件的头部字段。

客户端

GET /foo HTTP/1.1
Accept: text/html
If-None-Match: "some-string"

服务端

HTTP/1.1 304 Not Modified
ETag: "some-string"

6. 305 Use Proxy

被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应。

HTTP/1.1 305 Use Proxy
Location: https://proxy.example.org:8080/

7. 306 Switch Proxy

客户端已经是在代理模式,服务端可能出于安全因素,提示客户端需要切换一个新的代理。
306 在新的规范中已经不在使用,该编码保留。

HTTP/1.1 306 Switch Proxy
Set-Proxy: SET; proxyURI="https://proxy.imooc.com:8080/" scope="http://", seconds=100

8. 307 Temporary Redirect

307302 一样,都是对临时资源的重定向,不同的是 307 明确要求重定向的请求必须跟第一次的请求类型一样。第一次是 GET 第二次也必须是 GET,同样如果第一次是 POST,第二次也必须是 POST。302 则没有这么明确的要求,这可能导致有些浏览器第一次发出 POST,第二次却用 GET 重定向,而第二次实际上要求的是 POST,就容易出错。
307 是后面新增加的,这里提倡用 307 代替 302