网络 - 应用层协议HTTP
网络 - 应用层协议HTTP
一、介绍
- HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至 关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输 超文本(如 HTML 文档)。
- HTTP 协议是客户端与服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送 请求,服务器收到请求后处理并返回响应。HTTP 协议是一个无连接、无状态的协 议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。
- HTTP版本
存在HTTP0.9、HTTP1.0、HTTP1.1、HTTP/2、HTTP/3。目前最广泛使用的HTTP1.1版本。
二、URL
1、介绍
URL(Uniform ResourceLocator,统一资源定位符)是一种用于标识互联网上资源位置的标准地址格式。它为用户提供了一种简单而统一的方式来访问网络上的各种资源,如网页、图片、视频、文件等。
2、构成
- 协议(Scheme):定义了访问资源所使用的协议类型,常见的协议包括:
http://:超文本传输协议(HTTP),用于访问普通网页。
https://:安全的超文本传输协议(HTTPS),用于加密的网页访问。- 主机名(Host):标识资源所在的服务器地址,可以是域名(如www.example.com)或IP地址(如192.168.1.1)。
- 端口号(Port):指定服务器上运行的服务端口。如果省略,默认使用协议的标准端口(如HTTP的80端口,HTTPS的443端口)。
- 路径(Path):指定服务器上资源的具体位置,通常以/开头,例如/index.html。
- 查询字符串(Query):用于向服务器传递额外的参数,通常以?开头,参数以key=value的形式出现,多个参数之间用&分隔。例如?id=123&name=Kimi。
- 锚点(Fragment):用于定位页面内的某个特定部分,以#开头,例如#section1。
- 一个完整的URL示 例:http://www.xxxx.com:port/path/to/resource?query=parameter#anchor
3、作用
- 资源定位:URL能够精确地定位到互联网上的某个资源,无论是网页、图片、文件还是其他类型的资源。
- 资源访问:通过URL,用户可以使用浏览器或其他工具访问指定的资源。
- 链接功能:在网页中,URL被广泛用于创建超链接,方便用户从一个页面跳转到另一个页面。
- 参数传递:查询字符串部分可以向服务器传递动态参数,用于实现搜索、分页、用户登录等功能。
4、关于编码
- 像 / ? : 等这样的字符, 已经被 url 当做特殊意义理解了. 因此这些字符不能随意出现. 比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。
- 转义的规则如下: 将需要转码的字符转为 16 进制,然后从右到左,取 4 位(不足 4 位直接处理),每 2 位做一位,前面加上%,编码成%XY 格式,例如: ‘+’ ->%2B。
三、HPPT的报头
1、请求报头
- 首行: [方法] + [url] + [版本]。
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束。
- Body: 空行后面的内容都是 Body, Body 允许为空字符串. 如果 Body 存在, 则在Header 中会有一个 Content-Length 属性来标识 Body 的长度。

请求方法:
GET
用途:请求服务器返回指定资源的内容。
特点:
是最常用的HTTP请求方法。
请求参数通常通过URL的查询字符串传递(传递账号密码时可能存在安全隐患)。
应该只用于获取资源,不产生副作用(幂等:一个幂等操作,执行一次和执行多次的效果是相同的。)。
可以被缓存,可以保存书签,可以被搜索引擎索引。
Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。
支持版本:HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3。POST
用途:向服务器提交数据以创建或更新资源。
特点:
用于提交表单数据、上传文件或触发某些操作。
数据通常包含在请求体中(传递账号密码私密,相对安全)。
不幂等,多次请求可能会产生不同的结果。
不会被缓存,不会保存在浏览器历史记录中。
理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力,而并非限制。
支持版本:HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3。PUT
用途:向服务器上传或更新指定资源的内容。
特点:
用于替换目标资源的全部内容。
如果资源不存在,可能会创建新资源。
是幂等的,多次请求的结果相同。 数据包含在请求体中。
支持版本:HTTP/1.1、HTTP/2、HTTP/3。DELETE
用途:请求服务器删除指定的资源。
特点:
用于删除资源,如文件或数据库记录。
是幂等的,多次删除操作的结果相同。
不会返回被删除的资源内容,通常返回204(No Content)或200(OK)状态码。
支持版本:HTTP/1.1、HTTP/2、HTTP/3。HEAD
用途:请求服务器返回指定资源的头部信息,但不返回资源内容。
特点:
与GET方法类似,但只返回响应头,不返回响应体。
用于检查资源是否存在或获取资源的元数据(如最后修改时间、内容类型等) 是幂等的。
支持版本:HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3。OPTIONS
用途:请求服务器返回目标资源所支持的HTTP方法列表。
特点:
用于查询服务器支持的HTTP方法。
常用于跨域资源共享(CORS)预检请求。
返回的响应头中包含Allow字段,列出支持的方法。
支持版本:HTTP/1.1、HTTP/2、HTTP/3。PATCH
用途:对指定资源进行部分修改。
特点:
用于对资源进行局部更新,而不是替换整个资源。
数据通常包含在请求体中,描述需要修改的部分。
不幂等,多次请求可能会产生不同的结果。
支持版本:HTTP/1.1、HTTP/2、HTTP/3。CONNECT
用途:用于建立一个隧道(Tunnel)到目标服务器。
特点: 主要用于代理服务器或建立加密连接(如HTTPS)。
不直接操作资源,而是用于建立底层连接。
支持版本:HTTP/1.1、HTTP/2、HTTP/3。TRACE
用途:用于回显服务器收到的请求消息,主要用于调试。
特点:
返回的内容是服务器收到的原始请求。 由于安全原因,很少被支持或启用。
支持版本:HTTP/1.1、HTTP/2(不推荐使用)。
2、响应报头
- 首行: [版本号] + [状态码] + [状态码解释] 。
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\r\n 分隔;遇到空行表示 Header 部分结束。
- Body: 空行后面的内容都是 Body. Body 允许为空字符串. 如果 Body 存在, 则在Header 中会有一个 Content-Length 属性来标识 Body 的长度; 如果服务器返回了一个 html 页面, 那么 html 页面内容就是在
body 中。

常见状态码
1xx(信息性状态码)
2xx(成功状态码)
3xx(重定向状态码)
4xx(客户端错误状态码)
5xx(服务器错误状态码)
| 状态码 | 状态码描述 | 含义 |
|---|---|---|
| 100 | Continue | 100 Continue 上传大文件时,服务器告诉客户端可以继续上传 |
| 200 | OK | 访问网站首页,服务器返回网页内容 |
| 201 | Created | 发布新文章,服务器返回文章创建成功的信息 |
| 204 | No Content | 删除文章后,服务器返回“无内容”表示操作成功 |
| 301 | MovedPermanently | 网站换域名后,自动跳转到新域名;搜索引擎更新网站链接时使用,永久重定向,依赖 Location 选项 |
| 302 | Found 或 SeeOther | 用户登录成功后,重定向到用户首页,临时重定向,依赖 Location 选项 |
| 304 | Not Modified | 浏览器缓存机制,对未修改的资源返回 |
| 400 | Bad Request | 填写表单时,格式不正确导致提交失败 |
| 401 | Unauthorized | 访问需要登录的页面时,未登录或认证失败 |
| 403 | Forbidden | 尝试访问你没有权限查看的页面 |
| 404 | Not Found | 访问不存在的网页链接 |
| 500 | Internal ServerError | 服务器崩溃或数据库错误导致页面无法加载 |
| 502 | Bad Gateway | 使用代理服务器时,代理服务器无法从上游服务器获取有效响应 |
| 503 | ServiceUnavailable | 服务器维护或过载,暂时无法处理请求 |
3、Header
- Content-Type: 数据类型(text/html 等) 。
- Content-Length: Body 的长度。
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上。
- User-Agent: 声明用户的操作系统和浏览器版本信息。
- referer: 当前页面是从哪个页面跳转过来的。
- Location: 搭配 3xx 状态码使用, 告诉客户端接下来要去哪里访问。
- Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能。
- connection:主要用于控制和管理客户端与服务器之间的连接状态
管理持久连接:Connection 字段还用于管理持久连接(也称为长连接)。持久连接允许客户端和服务器在请求/响应完成后不立即关闭 TCP 连接,以便在同一个连接上发送多个请求和接收多个响应。
持久连接(长连接):HTTP/1.1:在 HTTP/1.1 协议中,默认使用持久连接。当客户端和服务器都不明确指定关闭连接时,连接将保持打开状态,以便后续的请求和响应可以复用同一个连接,HTTP/1.0:在 HTTP/1.0 协议中,默认连接是非持久的。如果希望在 HTTP/1.0上实现持久连接,需要在请求头中显式设置 Connection: keep-alive。
语法格式:
Connection: keep-alive:表示希望保持连接以复用 TCP 连接。
Connection: close:表示请求/响应完成后,应该关闭 TCP 连接。
更多推荐



所有评论(0)