http响应状态码该怎么用?

迈莫coding

共 3187字,需浏览 7分钟

 ·

2021-04-27 20:12


点击上方蓝色“迈莫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. 你点的每个赞,我都认真当成了喜欢



浏览 11
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报