HTTP 协议状态码-3XX
3XX
代表,代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来,后续的请求地址(目标)在本次响应的 Location 域中指明。
有多个的值,需要客户端自己选择, 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
请求的资源已经永久性的转移了,新资源 URI 在头部 Location
指明,这时候如果浏览器有书签,或者请求地址的缓存,最好都能替换成 Location
对应的值。
HTTP/1.1 Moved Permanently
Location: https://www.imocc.com/http/-moved-permanently
跟 相似,只是
302
代表的资源转移地址是临时的。
303
状态码和 302
状态码有着相同的,但 303
状态码明 确表示客户端应当采用 GET 请求 Location 的地址资源。
如果是以 POST 访问某个请求,返回 303
,此时应该换成 GET 去请求新地址。
一般是在有缓存的情况下,客户端发起资源请求,服务端判断之前的资源未过,可以继续使用缓存的资源。经常客户端请求的头部会带上 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"
被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应。
HTTP/1.1 305 Use Proxy
Location: https://proxy.example.org:8080/
客户端已经是在代理模式,服务端可能出于安全因素,客户端需要切换新的代理。
306 在新的规范中已经不在使用,该编码保留。
HTTP/1.1 306 Switch Proxy
Set-Proxy: SET; proxyURI="https://proxy.imooc.com:8080/" scope="http://", seconds=100
307
跟 302
一样,都是对临时资源的,不同的是 307
明确要求的请求必须跟第一次的请求类型一样。第一次是 GET 第二次也必须是 GET,同样如果第一次是 POST,第二次也必须是 POST。302
则没有这么明确的要求,这可能导致有些浏览器第一次发出 POST,第二次却用 GET ,而第二次实际上要求的是 POST,就容易出错。307
是后面新的,这里提倡用 307
代替 302
。