HTTP协议 HTTP请求和响应 HTTP状态码
一、HTTP协议
超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片、音乐、视频、超链接等等都属于超文本。
HTTP 协议的制作者是蒂姆·伯纳斯-李,1991年设计出来的,HTTP 协议设计之前目的是传输网页数据的,现在允许传输任意类型的数据。
传输 HTTP 协议格式的数据是基于 TCP 传输协议的,发送数据之前需要先建立连接。
HTTP协议规定了浏览器和 Web 服务器通信数据的格式,也就是说浏览器和web服务器通信需要使用http协议。
二、HTTP请求
常用的HTTP请求主要有2种,GET请求和POST请求。
GET请求:用于获取web服务器数据,请求参数在URL中;
POST请求:向web服务器提交数据。
GET请求示例如下:

POST请求示例如下:

post请求的请求体如下:

一个HTTP请求通常包含:请求行、请求头、空行、请求体(POST请求)。
GET / HTTP/1.1 和 POST /v2transapi?from=zh&to=en HTTP/1.1 是请求行,GET和POST是请求方式,后面跟1个空格,“/”和“/v2transapi?from=zh&to=en”是请求资源路径,HTTP/1.1是http协议1.1版本。
请求说明:
---- 请求行 ---- GET / HTTP/1.1\r\n # 请求方式 请求资源路径 HTTP协议版本 通过空格分开 ---- 请求头 ----- Host: www.baidu.com\r\n # 服务器的主机地址和端口号,默认是80 Connection: keep-alive\r\n # 和服务端保持长连接 Upgrade-Insecure-Requests: 1\r\n # 让浏览器升级不安全请求,使用https请求 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36\r\n # 用户代理,也就是客户端(通常是浏览器)的名称 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\r\n # 可接受的数据类型 Accept-Encoding: gzip, deflate, br\r\n Accept-Language: zh-CN,zh;q=0.9\r\n Cookie: (略过) \r\n ---- 空行 ---- 每项数据之间使用:\r\n (请求头信息后面还有一个单独的’\r\n’不能省略)
---- 请求体 ----
from=zh&to=en # 请求参数
POST方式的请求报文可以有请求行、请求头、空行、请求体四部分组成,注意:POST方式可以允许没有请求体,但是这种格式很少见
三、HTTP响应
在收到客户端的请求后,服务器会产生一个响应,并以一定的格式将其发回给客户端。
HTTP响应示例:

和HTTP请求类似,HTTP响应也包含:响应行(也叫状态行)、响应头、空行、响应体(返回给客户端的数据)。
响应说明:
HTTP/1.1 200 OK\r\n # HTTP协议版本 状态码 状态描述, 通过空格分开 Server: BWS/1.1\r\n # 服务器名称 Content-Type: text/html; charset=utf-8\r\n # 内容类型 Transfer-Encoding: chunked\r\n # 发送给客户端内容不确定内容长度,发送结束的标记是0\r\n, Content-Length表示服务端确定发送给客户端的内容大小,但是二者只能用其一。 Connection: keep-alive\r\n # 和客户端保持长连接 Date: Mon, 01 May 2023 13:15:11 GMT\r\n # 服务端的响应时间 --- 空行 --- --- 响应体 --- <!DOCTYPE html><html lang=“en”> …</html> # 响应给客户端的数据 注意:\r\n(响应头信息后面还有一个单独的’\r\n’不能省略)
四、常见状态码
- 100 Continue:客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。
- 101 Switching Protocols:服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。
- 102 Processing:由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
(2)成功
这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
- 200 OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。
- 201 Created:请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回。假如需要的资源无法及时建立的话,应当返回 '202 Accepted'。
- 202 Accepted:服务器已接受请求,但尚未处理。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了。
- 206 Partial Content:服务器已经成功处理了部分 GET 请求。
(3)重定向
这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。
- 300 Multiple Choices:被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。
- 301 Moved Permanently:被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。
- 302 Move Temporarily:请求的资源临时从不同的 URI响应请求。
- 303 See Other:对应当前请求的响应可以在另一个 URL 上被找到,而且客户端应当采用 GET 的方式访问那个资源。
- 304 Not Modified:如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。
- 305 Use Proxy:被请求的资源必须通过指定的代理才能被访问。
(4)请求错误
这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。
这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。
- 400 Bad Request:语义有误,当前请求无法被服务器理解,除非进行修改,否则客户端不应该重复提交这个请求;请求参数有误。
- 401 Unauthorized:当前请求需要用户验证。
- 403 Forbidden:服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。
- 404 Not Found:请求失败,请求所希望得到的资源未被在服务器上发现。出现这个错误的最有可能的原因是服务器端没有这个页面。
- 405 Method Not Allowed:请求行中指定的请求方法不能被用于请求相应的资源。
- 406 Not Acceptable:请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
- 408 Request Timeout:请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。客户端可以随时再次提交这一请求而无需进行任何更改。
(5)服务器错误
这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。
- 500 Internal Server Error:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。
- 501 Not Implemented:服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
- 502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
- 503 Service Unavailable:由于临时的服务器维护或者过载,服务器当前无法处理请求。
浙公网安备 33010602011771号