HTTP 的发展历史:
HTTP(超文本传输协议)自其引入以来经历了多个版本的发展,每个版本针对特定的需求和问题进行了改进。以下是 HTTP 协议的发展历史,以及各个重大更新版本的特性和优点。
-
HTTP/0.9 (1991):
- 特性: 最初版本,仅支持 GET 请求,只有简单的文本传输,且不支持 HTTP 头。
- 优点: 设计极其简单,适用于早期的 HTML 页面下载。
- 缺点: 功能有限,不支持 POST 请求,不具备复杂交互的能力。
-
HTTP/1.0 (1996):
- 特性:
- 引入了请求方法(GET、POST、HEAD)。
- 支持 HTTP 头,可以传递元数据(如内容类型、长度等)。
- 支持状态码,让客户端根据不同的返回码了解请求的结果。
- 优点: 提供了一定的状态指示和灵活性,但基本上还是无状态且每次请求需重新建立连接。
- 特性:
-
HTTP/1.1 (1997):
- 特性:
- 持久连接:默认允许复用连接,减少建立新连接的开销。
- 分块传输编码:允许将响应数据分块传输,适用于大数据传输。
- 增加了更多的请求方法(如 PUT、DELETE)。
- 允许使用缓存机制,提供更好的性能优化。
- 支持虚拟主机,允许在同一 IP 上托管多个网站(Host 头)。
- 优点: 与 HTTP/1.0 相比,减少了网络延迟,提高了性能,增加了灵活性并支持更复杂的应用。
- 特性:
-
HTTP/2 (2015):
- 特性:
- 二进制协议:将文本格式转换为二进制,提高了解析性能。
- 多路复用:允许在单个连接上并发多个请求和响应,避免了请求阻塞。
- 服务器推送:服务器可以主动推送资源到客户端,减少延迟。
- 头部压缩:使用 HPACK 算法压缩 HTTP 头,减少带宽占用。
- 优点: 显著提高了网络传输的效率,减少延迟,改善了现有应用的性能,尤其适合需要高性能的 web 应用。
- 特性:
-
HTTP/3 (正在发展中):
- 特性:
- 基于 QUIC 协议:QUIC 是由 Google 开发的一个传输层协议,可提供更快的连接和更优秀的安全性。
- 更快的连接建立:通过 0-RTT 连接建立减少延迟。
- 内建加密:HTTP/3 从一开始就整合了 TLS,提高传输安全性。
- 优点: 提高了传输效率和安全性,尤其是在不稳定的网络条件下,改善了用户体验。
- 特性:
HTTP协议的工作流程:
一次HTTP操作称为一个事务,其工作整个过程如下:
1 ) 地址解析
如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm
从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
协议名:http
主机名:localhost.com
端口:8080
对象路径:/index.htm
在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。
2)封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
3)封装成TCP包,建立TCP连接(TCP的三次握手)
在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口
4)客户机发送请求命令
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。
5)服务器响应
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
6)服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
HTTP协议的信息交换都是通过报文进行的
报文可以分为请求报文(浏览器/客户端发送至服务器)和响应报文(服务器发送至浏览器/客户端)
下面以HTTP/1.1为例介绍请求报文的内容
HTTP请求报文
HTTP请求报文由请求行、请求头、空行和请求实体四个部分组成
格式如下:

请求报文实例:

请求行
HTTP请求行包括以下几个部分:
1.请求方法
HTTP/1.1的请求方法有以下几个
| 1 | GET | 从服务器获取资源。用于请求数据而不对数据进行更改。例如,从服务器获取网页、图片等。 |
| 2 | POST | 向服务器发送数据以创建新资源。常用于提交表单数据或上传文件。发送的数据包含在请求体中。 |
| 3 | PUT | 向服务器发送数据以更新现有资源。如果资源不存在,则创建新的资源。与 POST 不同,PUT 通常是幂等的,即多次执行相同的 PUT 请求不会产生不同的结果。 |
| 4 | DELETE | 从服务器删除指定的资源。请求中包含要删除的资源标识符。 |
| 5 | PATCH | 对资源进行部分修改。与 PUT 类似,但 PATCH 只更改部分数据而不是替换整个资源。 |
| 6 | HEAD | 类似于 GET,但服务器只返回响应的头部,不返回实际数据。用于检查资源的元数据(例如,检查资源是否存在,查看响应的头部信息)。 |
| 7 | OPTIONS | 返回服务器支持的 HTTP 方法。用于检查服务器支持哪些请求方法,通常用于跨域资源共享(CORS)的预检请求。 |
| 8 | TRACE | 回显服务器收到的请求,主要用于诊断。客户端可以查看请求在服务器中的处理路径。 |
| 9 | CONNECT | 建立一个到服务器的隧道,通常用于 HTTPS 连接。客户端可以通过该隧道发送加密的数据。 |
2.URL
- URL(Uniform Resource Locator 统一资源定位符)用于定位信息在服务器的位置
- URL的构成:http://<host>:<port>/<path>?<searchpart>
- 其中,host为服务器的主机名,port为服务器进行http服务的的端口,默认情况为80
- path为请求的资源在服务器上的路径,searchpart为附加信息,port、path、searchpart部分是可选的
- 示例:https://www.example.com/search?q=apple&type=fruit&page=1
3.协议版本
HTTP协议的版本常见的有HTTP/1.1,HTTP/2.0两种
请求头
由一系列的”key:value“组成,起到了传递额外信息的作用。http/1.1定义了47中请求头部字段,以下是常见的几种
- Host: 请求的服务器域名和端口号。
- User-Agent: 用户代理,包括客户端的基本信息。不同行浏览器有不同的 User-Agent,例如 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101。
- Accept: 指定浏览器能够接受的内容类型,比如
text/html、application/xhtml+xml、application/xml等。 - Accept-Encoding: 浏览器支持的内容编码,例如 gzip。
- Accept-Language: 浏览器可接受的语言,例 zh-CN、zh; q=0.7、en-US; q=0.7。
- Connection: 是否保持连接,HTTP/1.1 默认使用长连接。
- Cookie: HTTP 请求发送时,会把对应的 cookie 一起发送给服务器。
- Content-Length: 请求或响应体的长度(单位是字节)。
- Content-Type: 实体的 MIME 类型,通常是
text/html; charset=utf-8。
请求实体
客户端/浏览器要交由服务器处理的数据,可以是二进制数据,也可以是格式化的文本
HTTP应答报文
HTTP应答报文的格式与请求报文的格式几乎完全一致,就不过多介绍
格式如下:

状态行
协议版本
与请求报文相同
状态码
| 1xx | 信息性状态码 | 表示接收的请求正在处理 |
|---|---|---|
| 2xx | 成功状态码 | 表示请求正常处理完毕 |
| 3xx | 重定向状态码 | 需要后续操作才能完成这一请求 |
| 4xx | 客户端错误状态码 | 表示请求包含语法错误或无法完成 |
| 5xx | 服务器错误状态码 | 服务器在处理请求的过程中发生了错误 |
原因短语
用于对状态码做出解释的一些简短的单词或短语
如
| 200 | OK | 请求成功。一般用于GET与POST请求 |
| 201 | Created | 已创建。成功请求并创建了新的资源 |
| 202 | Accepted | 已接受。已经接受请求,但未处理完成 |
| 403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
| 404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
| 405 | Method Not Allowed | 客户端请求中的方法被禁止 |
响应头
- 描述服务器的基本信息,告知客户端如何处理报文数据。
- 下面是常用头部的一部分。
- Allow: 指明服务器支持哪些请求方法,如GET、POST等。
- Content-Encoding: 文档的编码方式。只有在解码之后才可以得到Content-Type头指定的内容类型。
- Content-Length: 表示响应文档实体的长度(单位为字节)。
- Content-Type: 指明实体的MIME类型。
- Connection: 与请求报文相同,当处于长连接时,取值为keep-alive。
- Date: 当前的GMT时间,例如Tue, 05 Jul 2022 11:12:58 GMT。
- Expires: 告知浏览器该资源缓存多久时间,-1代表不进行缓存。
- Last-Modified: 文档的最后修改时间,如Sat, 02 Jul 2022 03:19:16 GMT。
- Location: 配合302状态码使用,用于重定向到一个新的地址。
- Server: 将服务器的类型告知浏览器,如nginx。该值由服务器自动设置。
- Set-Cookie: 设置和页面相关的Cookie。
响应实体
实体存储着服务器响应的主要内容,如数据,HTML文档代码等

2890

被折叠的 条评论
为什么被折叠?



