HTTP协议基础
一.定义
HTTP协议(HyperText Transfer Protocol),超文本传输协议,它是一种客户端(如网页浏览器)和服务器端(如网站服务器)之间进行通信、请求与响应数据的规则集合。通过 HTTP 协议,客户端可以向服务器发起获取网页、图片、脚本等各种资源的请求,服务器接收到请求后,按照协议规范处理请求并返回相应的响应数据给客户端。
二.发展历史
- HTTP/0.9:初代版本,功能简单,仅支持获取 HTML 文档,且只有 GET 一种请求方法,响应单纯为 HTML 内容。
- HTTP/1.0:增加了请求方法(如 POST 等),支持多类型文件传输,引入请求头和响应头,完善了通信灵活性,但存在连接效率问题。
- HTTP/1.1:广泛应用版本,支持持久连接、更多请求方法(PUT、DELETE 等),优化了缓存控制机制,增强虚拟主机支持等。
三.工作原理
- 建立连接:客户端基于 TCP(HTTP/1.1 及之前)或 QUIC(HTTP/3)协议向服务器发起连接请求,部分版本支持连接复用。
- 客户端发起请求:构造包含请求行、请求头、请求体(可选)的请求消息,向服务器发送,不同请求方法有不同用途(GET 获取、POST 提交等)。
- 服务器处理请求:按请求信息查找并处理相应资源,依据请求头要求操作。
- 服务器返回响应:构造含响应行、响应头、响应体的响应消息,发送回客户端,响应状态码表明处理结果。
- 关闭连接(视情况):早期版本或特定场景下完成交互即关闭;支持持久连接的版本会按需保持或超时关闭。
四.请求与响应
1.请求
HTTP 请求由请求行、请求头、请求体(可选)这三大部分构成,它们按照特定顺序组合在一起,从客户端发送到服务器,告知服务器客户端的需求以及相关的附加信息等,服务器会依据这些内容来进行相应处理并返回响应。
1.1 请求行
请求行是请求消息的第一行,由请求方式,请求资源路径和协议版本这三部分组成。
请求方式
明确客户端希望服务器执行的操作类型,常见的请求方法有 GET、POST、PUT、DELETE 等。
- GET:通过URL请求服务器发送资源,通常用于获取数据,客户端可见,不适合用于传输加密信息。
- POST:用于向指定资源提交数据,通常用于创建或更新资源。POST请求的数据包含在请求体中,适合需要提交表单数据的场景,客户端不可见。
- HEAD:类似于GET请求,但响应中不返回报文主体内容,仅返回报文头信息,常用于检查资源的存在性和元数据。
- PUT:用于替换指定资源的内容,通常用于更新或创建资源。
- DELETE:用于请求服务器删除指定的资源。
1.2 请求头
请求头紧跟在请求行之后,它由一系列的键值对组成,每一行代表一个头字段,用于向服务器传递各种额外的信息。
-
host:指定请求的目标主机域名或 IP 地址以及端口号,这有助于服务器区分不同域名对应的资源请求。
-
User-Agent:用来告知服务器客户端的软件信息,包括浏览器类型、版本以及操作系统等情况,服务器可以根据此信息来进行兼容性处理或者统计客户端使用情况等。
-
Accept:向服务器表明客户端能够接受的响应内容的类型以及优先级(从左到右优先级降低)。q为质量因子,通过q体现优先级。
-
Accept-Encoding:说明客户端支持的内容编码格式,目的是告知服务器可以对响应内容采用这些编码方式进行压缩后传输,以节省网络带宽,客户端在接收到响应后会进行相应的解码操作来还原内容。
-
Accept-Language:用于传达客户端需要的语言,服务器可以据此提供对应的语言版本的内容。
-
Content-Type:该头字段用来指定请求体中数据的类型。
- application/x-www-form-urlencoded:用于表单数据编码格式
- multipart/form-data 用于包含文件上传的复杂表单数据格式
-
Content-Length:指明请求体中数据的长度,告诉服务器要接受的数据量多少。
1.3 请求体
主要用于在需要向服务器传递数据时使用,如post传递表单数据时。
2.响应
HTTP 响应是服务器针对客户端发起的 HTTP 请求所做出的回复,告知客户端请求的处理结果,并在合适情况下返回相应的资源内容。它遵循一定的格式规范,由多个关键部分构成,以方便客户端正确解析和处理接收到的信息。
同样的,响应也由三部分构成:
2.1 响应行
由协议版本,状态码和状态描述三部分构成。
状态码
状态码表明资源的请求结果状态,第一位表示类型:
常见状态码及其描述:
2.2 响应头
响应头也紧跟在响应行之后,它同样由一系列的键值对组成,每一行代表一个头字段。
- Date:原始服务器消息发出的时间,用格林尼治时间表示。
- Allow:服务器允许那种请求方式,不运行则返回403(禁止访问被请求资源)。
- Content-Encoding:服务器支持的返回内容压缩编码类型。
- Content-Language:响应体的语言。
- Content-Length:响应体的长度。
- Server:响应服务器的软件名称。
- X-Powered-By:告知客户端该响应是由哪种服务器软件或框架生成的。
2.3 响应体
响应体是服务器依据客户端请求进行相应处理后,要传递给客户端的具体数据实体。其作用在于为客户端提供请求所期望获取的内容,比如当客户端请求查看一个网页时,响应体就是该网页对应的 HTML 代码。