http常见状态码
1xx
需要请求者继续执行操作的状态码
100 continue 请求者需要继续发送请求,服务器收到部分请求,等待其余部分
101 切换协议 请求要求服务器切换协议,服务器已经确认,准备切换
2xx
请求成功
200 ok 服务器收到请求,并处理成功,返回结果
❗️201 已创建 请求成功并且服务器已经创建了资源
❗️202 已接受 服务器接受了请求但是未处理
204 no content 服务器成功处理了请求,但是没有返回内容
206 部分请求
3xx
重定向,完成请求需要进一步操作
301 (Moved Permanently) 永久重定向 所请求的资源被永久移动了,响应的 location 字段中指明了新的 URL,浏览器自动使用 get 方法重定向到新的 URL,并且后续的请求也使用新的 URL
302 (Found) 临时重定向 所请求的资源被临时移动了,响应的 location 字段中指明了新的 URL,浏览器自动使用 get 方法重定向到新的 URL,但是后续的请求依旧使用旧的 URL
301 和 302 应该是支持任意方法的重定向,但是浏览器都使用 get 方法重定向
303 see other 临时重定向 会将任意请求方法都重定向为 get 类似于 302
304 not modified 协商缓存
307 (Temporary Redirect) 临时重定向 类似于 302 , 不会修改重定向请求的方法
308 (Permanent Redirect) 永久重定向 类似于 301
301、302、303、307、308 的区别
301、308 都是永久重定向 302、303、307 都是临时重定向
302 Found
302 状态码表示目标资源临时移动到了另一个 URI 上。由于重定向是临时发生的,所以客户端在之后的请求中还应该使用原本的 URI。
服务器会在响应 Header 的 Location 字段中放上这个不同的 URI。浏览器可以使用 Location 中的 URI 进行自动重定向。
由于历史原因,用户代理可能会在重定向后的请求中把 POST 方法改为 GET 方法。如果不想这样,应该使用 307(Temporary Redirect) 状态码。
303 See Other
303 状态码表示服务器要将浏览器重定向到另一个资源,这个资源的 URI 会被写在响应 Header 的 Location 字段。从语义上讲,重定向到的资源并不是你所请求的资源,而是对你所请求资源的一些描述。
303 常用于将 POST 请求重定向到 GET 请求,比如你上传了一份个人信息,服务器发回一个 303 响应,将你导向一个“上传成功”页面。
不管原请求是什么方法,重定向请求的方法都是 GET(或 HEAD,不常用)
到这里你可能发现,303 和 302 的作用很类似,除去语义差别,似乎是 302 包含了 303 的情况。
307 Temporary Redirect
307 的定义实际上和 302 是一致的,唯一的区别在于,307 状态码不允许浏览器将原本为 POST 的请求重定向到 GET 请求上。
总结
302 允许各种情况的重定向,一般情况下会实现为到 GET 的重定向,但是不能确保 POST 会重定向为 POST;303 会允许任意请求到 GET 的重定向;307 和 302 一样,但是不允许 POST 到 GET 的重定向
301 和 308
301 Moved Permanently
301 状态码表明目标资源被永久的移动到了一个新的 URI,任何未来对这个资源的引用都应该使用新的 URI。
308 Permanent Redirect
308 的定义实际上和 301 是一致的,唯一的区别在于,308 状态码不允许浏览器将原本为 POST 的请求重定向到 GET 请求上。
4xx
客户端错误
400 bad request 客户端的请求服务其无法理解
401 未授权 需要客户端登陆认证
403 forbidden 禁止访问
404 not found 请求的资源不存在
413 请求实体过大
414 请求的 url 过长
415 不支持的媒体类型
5xx
服务器错误
500 服务器内部错误
502 错误网关 服务器作为网关或代理,从上游服务器收到无效响应
503 服务不可用 由于超载或者是维护无法提供服务,是暂时的状态 (响应中有一个 Retry-After 字段,提示客户端在多久之后重试)
504 Gateway Timeout 服务器作为网关或者代理,但是没有即使从上游服务器收到响应
505 HTTP 版本不支持 服务器不支持请求中使用的 http 协议的版本