HTTP
一、概述
本文为《图解HTTP学习笔记》
HTTP 相关概念:
HTTP (HyperText Transfer Protocol):
超文本传输协议。- HTTP 是一个
应用层协议
,由请求和响应构成,是一个标准的客户端服务器模型。 - HTTP 是
无状态协议
,即每次 HTTP 请求之间都是相互独立的,服务端不知道客户端具体的状态。 - HTTP 默认端口号为80。
HTTP 的版本及其差异
HTTP1.0
:未实现默认连接持久化,每次请求 TCP 都需要进行3次握手。HTTP1.1
:默认实现了连接持久化HTTP2.0
:连接的多路复用
二、HTTP 持久连接、管线化
HTTP 早期版本,每次请求前 TCP 要进行三次握手建立连接,请求结束后要进行4次握手结束连接,每次请求都会造成无畏的 TCP 连接的建立和断开,增加通信量的开销。
持久连接:
HTTP1.1 默认实现了持久连接,支持单次建立连接后可以支持多次请求,减少了 TCP 重复建立连接的时间损耗,提升了网络的响应速度。
管线化:
管线化支持多个请求同时发送,无需等待上一个请求结束后才开始。
三、HTTP请求方法
基于 HTTP1.1
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求访问已被 Uri 识别的资源。 |
2 | HEAD | 类似于 GET 请求,但返回的响应报文中没有主体内容,只有响应头,该方法用于获取报文头部。 |
3 | POST | 向服务端提交数据处理的请求,数据被包含在请求体中。 |
4 | PUT | 用于传输文件 |
5 | DELETE | 请求服务器删除指定文件,与 PUT 相反。 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为隧道方式的代理服务器。 |
7 | OPTIONS | 查询针对请求的 Uri 指定资源支持的请求方法。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
四、HTTP 报文
1. 报文的结构
HTTP报文: 用于 HTTP 协议交互的信息被称为 HTTP 报文。
HTTP报文结构: 分为报文首部、报文主体。如下图所示:
HTTP报文类型: 请求报文、响应报文。
如何提升传输效率?
可以对传输的内容进行编码压缩。
常见的编码压缩方式有:
gzip
、compress
(UNIX 系统的标准压缩)、deflate(zlib)
、identity
(不进行编码)。
2. 响应状态码
2XX 成功
状态码 | 描述 |
---|---|
200 | OK:表示服务端返回的成功 |
204 | No Content:服务端接收成功,且返回的响应无实体部分。 |
3XX 重定向
状态码 | 描述 |
---|---|
301 | Move Permanently:资源永久转移到其它 URI |
302 | Found:资源临时性的转移到其它 URI |
303 | See Other:请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求资源 |
304 | Not Modified:请求头若携带If-Match 、If-Modified-Since 、If-None-Match 、If-Unmodified-Since 任一头部字段时,服务器允许访问资源,否则返回304 |
307 | Temporary Redirect:临时重定向 |
4XX 客户端错误
状态码 | 描述 |
---|---|
400 | Bad Request:请求报文中存在语法错误 |
401 | Unauthorized:发送的请求需要有HTTP认证的信息 |
403 | Forbidden:请求资源的访问被拒绝 |
404 | Not Found:服务端无法找到请求资源 |
5XX 服务端错误
状态码 | 描述 |
---|---|
500 | Internal Server Error:服务端执行请求时发生错误 |
503 | Service Unavilable:服务端暂时无法处理请求(超负荷、或停机) |
3. HTTP 首部结构
HTTP 首部包括请求报文的首部和响应报文的首部。
3.1 请求报文结构
请求报文包括:报文首部和报文主体。细分如下图:
3.2 响应报文结构
响应报文包括:报文首部和报文主体。细分如下图:
3.3 首部字段根据实际用途分为4种类型
- 通用首部字段: 请求报文和响应报文通用的首部 (如协议版本号)。
- 请求首部字段: 客户端发送报文时专用首部 。
- 响应首部字段: 服务器端响应报文时专用首部。
- 实体首部字段: 针对请求报文和响应报文实体部分使用的首部。
通用首部字段:
请求首部字段:
响应首部字段:
实体首部字段:
3.4 常用的首部字段
Cache-Control:
通常通过指定首部字段 Cache-Control 的指令,来实现缓存机制。Connetion:
管理持久连接。Transfer - Encoding:
规定了请求报文主体采用的编码方式。Accept - Encoding:
告诉服务端,用户端可以接收的类型。Host:
主机名和端口号 (用于区分一个IP映射多台主机时,无法区分哪台主机的问题)。Content - Encoding:
服务器告诉客户端实体内容的编码方式。Content - Length:
服务端回传实体内容的长度。