HTTP是超文本传输协议(Hypertext Transfer Protocol),是用于从网页服务器传输超文本到本地浏览器的协议。它允许从网页服务器获取网页,图片,视频等资源。
HTTP协议使用请求/响应模型。客户端通过请求报文向服务器获取信息,服务器以响应报文的形式返回信息。
例如:
请求报文:
GET /index.html HTTP/1.1
Host: www.example.com
响应报文:
HTTP/1.1 200 OK
Content-Type: text/html
<html>
<body>
<h1>Hello, world!</h1>
</body>
</html>
HTTP协议有3个主要版本:
- HTTP/1.0:首个正式版本,发布于1996年。
- HTTP/1.1:发布于1999年,新增了长连接支持,增加了Host头部等。目前使用最广的版本。
- HTTP/2:发布于2015年,基于SPIFFE标准,使用二进制分帧层,添加了头部压缩,多路复用等特性。
例如:
HTTP/1.1新增的长连接支持可以重用连接,不需要每次请求都进行TCP握手,可以提高传输效率。
HTTP/2的二进制分帧层和多路复用可以同时发送多个请求,大大降低了延迟,提高了页面加载速度。
HTTP协议的工作流程主要分为以下几个步骤:
- 客户端连接到服务器的80或443端口。
- 客户端向服务器发送一个请求报文。
- 服务器解析请求报文,并返回一个响应报文。
- 客户端解析响应报文的内容。
- 连接关闭或重用。
例如:
请求报文
GET /index.html HTTP/1.1
Host: www.example.com
响应报文
HTTP/1.1 200 OK
Content-Type: text/html
<html>
<body>
<h1>Hello, world!</h1>
</body>
</html>
HTTP协议定义了以下9种请求方法:
- GET:用于获取资源。
- POST:用于创建资源。
- PUT:用于更新资源。
- DELETE:用于删除资源。
- HEAD:获取报文首部。
- OPTIONS:获取信息,关于目标资源的哪些请求方法受支持。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
- CONNECT:要求 proxy 将连接改为管道方式的代理。
- PATCH:用于更新资源的部分内容。
例如:
GET /users
POST /users
PUT /users/1
DELETE /users/1