当客户端把请求发送给服务器后,对方会根据处理结果返回一系列HTTP数据包。其中第一行就用给定格式表明服务器对请求处理的结果。第一行包括三部分信息,第一部分是一个数值,也叫状态码,用来表明请求是否成功,第二部分是对状态码的字符串解读,用于说明状态码表示的含义,第三部分就是协议的版本。
第一部分的数值其实是用于机器解读,因为机器适用于解读数值。第二部分字符串其实是为了方便与人来解读。状态码跟我们前面描述的FTP协议一样拥有给定形式,它由三位数字组成,其中第一位数字的作用最为重要,它用于表达状态的分类,第二和第三位数字能够组合成100种情况,是对第一位数字所表明的给定分类下的进一步解读,通常状态码以”xyy"的形式给出,我们先看x表示的含义:
状态码格式 | 含义 | 说明 |
---|---|---|
1yy | 说明类消息 | 用于说明某些信息,并不表明请求是否成功 |
2yy | 请求成功 | 客户端发来的请求被服务器正常处理并返回相应结果 |
3yy | 重定向 | 请求没有成功,需要客户端采取指定措施来确保请求能得到执行 |
4yy | 客户端错误 | 请求无效,存有语法错误或者服务器因为某些原因无法完成请求,并且服务器认为原因来自于客户端 |
5yy | 服务器错误 | 客户请求合法,但是由于服务器原因无法完成请求 |
从上表看出,第一个数字将信息分成了5大类,接下来的yy用于对某一类情况进行具体描述,例如常见的404,第一个数字4表示客户端请求出错,接下来的“04”表示服务器没有客户端请求的数据。“00”表示通用信息,它不给出具体的说明,通常情况下表明当前情况不属于任何特定情况,例如“400”只是表示客户端出错,但服务器无法详细说明客户端出了什么具体问题。
接下来是状态码的字符串说明,这是为了能够给人类提供容易读懂的信息。这部分信息能被服务器的管理员进行调整,它只是简短的描述相应信息,更多详细说明可能包含在数据包里面。我们看看常用的状态码及其字符串描述
状态码格式 | 字符串 | 说明 |
---|---|---|
100 | Continue | 客户端可以继续向服务器发送请求,因为后面是00,因此它是通用信息 |
101 | Switching Protocols | 客户端必须Upgrade包头要求服务器使用新版本协议并且服务器同意了请求 |
200 | OK | 客户端请求被服务器接受 |
201 | Created | 请求成功同时被请求的资源正在生成,通常情况下该状态码用于回复PUT请求 |
202 | Accepted | 请求被服务器接受但还未被处理 |
203 | No-Authoritative Information | 请求成功,但是返回的某些信息并非来自当前服务器而是其他第三方 |
204 | No Content | 请求成功,但服务器认为无需返回任何信息给客户端 |
205 | Reset Content | 请求成功,服务器要求客户端重置被返回的文本以便防止继续发送类似请求,该回复通常用于表格提交 |
206 | Partial Content | 请求成功,并部分完成了GET请求,具体内容在后续章节详解 |
300 | Multiple Choices | 服务器返回多条解释信息,客户端从返回的多条信息中选择最适合自己的一条 |
更多的信息在我们后续实现协议时再进行解读。这里我们再看看返回码100。通常情况下客户端发送给服务器一个完整请求然后等待服务器的处理结果,但是某些情况下客户端会先试探服务器是否愿意接收客户端要发送的请求,如果服务器愿意,客户端再发送请求。在特殊情况下,客户端可能会向服务器发送含有大量数据的请求。
这种情况下客户端就得实现看看服务器是否愿意接收请求,它会发生一个特殊请求包头:"Expect : 100-continue",如果服务器支持这种包头,它就会处理该请求包头,然后会返回"100 Continue"作为初始回应,这等于告诉客户端继续发送余下的请求,然后客户端服务器进入正常的请求回应流程,具体情况在代码实践时再进行详细研究。
更详细的讲解和代码调试演示过程,请点击链接](https://study.163.com/provider/7600199/course.htm?share=2&shareId=7600199)
更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
这里写图片描述
网友评论