http响应状态码该怎么用?

迈莫coding

共 3187字,需浏览 7分钟

 · 2021-04-27


点击上方蓝色“迈莫coding”,选择“设为星标”

 

前两讲我们分别聊了http的含义及其http报文那些事儿,知道了作为客户端如何将数据发送给服务端,知道了请求报文的字段属性含义。

 

如果对http报文不了解的话,推荐看一下我之前写的文章......


计网以往文章

 

 


前言


 

客户端和服务端进行数据交互时,当服务端收到客户端传输过来的数据,解析后进行处理,最终拼接成一个响应报文传输给客户端。

 

现在我们回顾一下响应报文中响应行的组成部分:

 

 

由图可知,响应行由三部分组成:

 

  • 版本号:http协议版本号。

 

  • 状态码:一个三位数,用代码的形式表示处理的结果,比如 200 是成功,500 是服务器错误。

 

  • 原因:作为数字状态码补充,是更详细的解释文字,帮助人理解原因。

 

举例说明一下响应行:

 

HTTP/1.1 200 OK
 

这表示:浏览器你好,我已经处理完了你的请求,这个报文使用的协议版本号是 1.1,状态码是 200,一切OK。”

 

对于客户端来说,响应行中最有用的是状态码,客户端可以通过不同的状态码进行不同的逻辑处理。它是一个十进制数字,以代码的形式表示服务器对请求的处理结果,就像我们通常编写程序时函数返回的错误码一样。


状态码

 

目前 RFC 标准里规定的状态码是三位数,所以取值范围就是从 000 到 999。

 

RFC 标准把状态码分成了五类,用数字的第一位表示分类,而 0~99 不用,这样状态码的实际可用范围就大大缩小了,由 000~999 变成了 100~599。

 

这五类的具体含义:

 

  • 1×× : 请求处理中,请求已被接受,正在处理

 

  • 2×× : 请求成功,请求被成功处理

 

  • 3×× : 重定向,要完成请求必须进行进一步处理

 

  • 4×× : 客户端错误,请求不合法

 

  • 5×× : 服务器端错误,服务器不能处理合法请求

 

客户端作为请求方,会将数据传输给服务端,服务端解析完成后,会通过响应报文方式传输给客户端,客户端获取响应报文后,通过响应行中的状态码,开启进一步的操作。通过状态码可以知道服务端是否处理成功失败,是否需要重新发送......

 


状态码 1XX

 

1××类状态码属于提示信息,是协议处理的中间状态,实际能够用到的时候很少。

 


状态码 2XX

 

2XX 类状态码表示服务端已成功接收数据且处理完成,这也是客户端想见到的状态码

 

  • 200 OK

 

200 状态码表示一切正常,服务端如客户端期望哪有返回响应结果。

 

 

  • 204 Not Content

 

204 状态码是另一个很常见的成功状态码,它的含义与“200 OK”基本相同,但响应头后没有 body 数据。所以对于 Web 服务器来说,正确地区分 200 和 204是很必要的。

 

  • 206 partial Content

 

206 partial Content 是HTTP 分块下载或断点续传的基础,在客户端发送“范围请求”、要求获取资源的部分数据时出现,它与 200 一样,也是服务器成功处理了请求,但 body 里的数据不是资源的全部,而是其中的一部分。

 

状态码 206 通常还会伴随着头字段“Content-Range”,表示响应报文里 body 数据的具体范围,供客户端确认,例如“Content-Range: bytes 0-99/2000”,意思是此次获取的是总计 2000 个字节的前 100 个字节。

 


状态码 3XX

 

3XX 状态码表示客户端请求的资源发生了改动,需要使用新的URI来访问资源。

 

  • 301 Moved Permanently

 

301 Moved Permanently 被称为“永久重定向”,也就是说请求资源已经不存在,需要使用新的RUI访问。

 

  • 302  Found

 

302  Found 被称为"临时重定向",也就是说请求资源还在,暂时使用新的URI访问。但后续仍然使用旧URI进行访问。

 

状态码 4XX

 

4XX 状态码表示客户端的错误,请求不合法。

 

  • 400 Bad Request

 

400 Bad Request表示客户端中有语法错误,不能被服务器理解。

 

  • 403 Forbidden

 

403 Forbidden 表示服务端收到了客户端的请求,但拒绝提供服务。原因可能多种多样,例如信息敏感、法律禁止等。

 

  • 404  Not Found

 

404  Not Found 可能是我们最常看见也是最不愿意看到的一个状态码,它的原意是资源在本服务器上未找到,所以无法提供给客户端。

 

状态码 5XX

 

5××类状态码表示客户端请求报文正确,但服务器在处理时内部发生了错误,无法返回应有的响应数据,是服务器端的“错误码”。

 

  • 500 Internal Server Error

 

500 Internal Server Error 与 400 类似,也是一个通用的错误码,服务器究竟发生了什么错误我们是不知道的。不过对于服务器来说这应该算是好事,通常不应该把服务器内部的详细信息,例如出错的函数调用栈告诉外界。虽然不利于调试,但能够防止黑客的窥探或者分析

 

  • 502 Bad Gateway

 

502 Bad Gateway 常是服务器作为网关或者代理时返回的错误码,表示服务器自身工作正常,访问后端服务器时发生了错误,但具体的错误原因也是不知道的

 

  • 503 Server Unavailable

 

503 Server Unavailable 表示服务器当前很忙,暂时无法响应服务,我们上网时有时候遇到的“网络服务正忙,请稍后重试”的提示信息就是状态码 503

 


小结


 

  • 状态码是用来告知客户端该请求是否处理成功

 

  • 状态码是十进制的三位数,分为五类,从 100 到 599

 

  • 2××类状态码表示成功,常用的有 200、204、206

 

  • 3××类状态码表示重定向,常用的有 301、302

.

  • 4××类状态码表示客户端错误,常用的有 400、403、404

 

  • 5××类状态码表示服务器错误,常用的有 500、502、503

 

 

到这里,http响应状态码就说到这里了。好了,我们下期再见~~~


 


分割线




往期推荐


http长连接和短连接机制

揭开http报文的神秘面纱

http到底有什么魔性,备受青睐

elasticsearch 增删改查底层原理

elasticsearch入门篇

你真的知道怎么实现一个延迟队列吗?

go语言十分钟入门教程


 

文章也会持续更新,可以微信搜索「 迈莫coding 」第一时间阅读。每天分享优质文章、大厂经验、大厂面经,助力面试,是每个程序员值得关注的平台。



  1. 你点的每个赞,我都认真当成了喜欢



浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报