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 一样,但是不允许 GET 到 POST 的重定向
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 协议的版本
网友评论