HTTP基础01:HTTP协议概述

Last updated on December 31, 2024 pm

HTTP协议概述

在当今数字化的时代,我们每天都在与网络进行着无数次的交互,而这背后离不开众多网络协议的支撑,其中 HTTP(超文本传输协议)起着至关重要的作用。无论是浏览网页、使用手机应用获取数据,还是各种智能设备之间的信息传输,HTTP 都在默默地为我们服务。今天,就让我们深入了解一下 HTTP 的奥秘。

1. HTTP 的定义与作用

1.1 定义

HTTP 是一种用于分布式、协作式和超媒体信息系统的应用层协议。简单来说,它定义了客户端和服务器之间如何进行通信,规定了数据的格式、传输方式以及各种操作的方法。它工作在 TCP/IP 协议栈的应用层基于传输层的 TCP 协议来确保数据的可靠传输。

例如,当你在浏览器中输入一个网址并按下回车键时,浏览器就会作为客户端向服务器发送一个 HTTP 请求,请求获取特定的网页资源。服务器接收到请求后,根据 HTTP 协议的规范对请求进行处理,并将相应的网页内容以 HTTP 响应的形式返回给浏览器,浏览器再将这些内容解析并展示给用户,这就是 HTTP 在我们日常网络浏览中最基本的工作流程。

1.2 作用

HTTP 的主要作用是实现客户端和服务器之间的超文本数据传输,从而使得我们能够在互联网上获取和交换各种信息。它使得不同的系统和平台能够相互通信,无论是大型的服务器集群还是小型的嵌入式设备,只要遵循 HTTP 协议,就能够进行有效的数据交互。

比如,

电子商务网站依靠 HTTP 协议来实现商品信息的展示、用户订单的提交和处理;

社交媒体平台利用它来加载动态内容、上传和下载图片视频等;

在线教育平台借助 HTTP 让学生获取课程资料、参与直播互动等。

可以说,HTTP 是现代互联网应用的基石,没有它,我们所熟悉的丰富多彩的网络世界将不复存在。

2. HTTP 的发展历史

版本 主要特性 优点 缺点
HTTP/0.9 只支持 GET 方法,无请求和响应头部信息,服务器仅响应 HTML 文档,连接在响应后立即关闭 简单,满足基本网页浏览需求 功能单一,仅支持 HTML 文档获取,无连接复用
HTTP/1.0 引入更多请求方法(如 POST、HEAD 等),增加请求和响应头部信息,支持多种文件类型传输 丰富了网页内容呈现形式,能传输多种类型资源 每个请求需建立新的 TCP 连接,性能较低
HTTP/1.1 引入持久连接(Keep-Alive),增加更多请求方法(如 PUT、DELETE 等)和头部字段 减少连接建立和关闭开销,提高网络传输效率,增强协议功能和灵活性 仍存在性能瓶颈,如队头阻塞问题
HTTP/2 采用二进制分帧层,实现多路复用,支持服务器推送 显著提高资源并行传输能力,降低延迟,优化网络性能 对服务器和客户端实现要求较高,部分老旧基础设施和设备支持不佳
HTTP/3 基于 UDP 协议,引入 QUIC 协议,继承 HTTP/2 特性 进一步降低延迟,具备更好连接迁移能力和拥塞控制,提升性能和可靠性 UDP 协议本身的可靠性相对 TCP 较弱,应用普及需要时间

2.1 HTTP/0.9

HTTP 的最初版本 HTTP/0.9 极其简单,它只支持 GET 方法,主要用于获取 HTML 文档。在这个版本中,请求和响应都没有头部信息,服务器只能响应 HTML 格式的内容,并且连接在响应后立即关闭,不支持其他类型的资源传输和复杂的交互操作。但正是这个简单的版本开启了 HTTP 协议的发展之路,满足了当时人们对网页浏览的基本需求,使得网络信息的获取变得更加便捷。

2.2 HTTP/1.0

随着网络应用的逐渐丰富,HTTP/1.0 应运而生。它引入了更多的请求方法(如 POST、HEAD 等),并且增加了请求和响应的头部信息,使得客户端和服务器能够传递更多关于请求和响应的元数据,例如内容类型、编码方式等。这一版本还支持多种类型的文件传输,如图片、样式表等,大大丰富了网页的内容呈现形式。然而,HTTP/1.0 存在一个显著的问题,即每个请求都需要建立一个新的 TCP 连接,这导致了在请求大量资源时效率较低,因为建立和关闭 TCP 连接的开销较大。

2.3 HTTP/1.1

为了解决 HTTP/1.0 的性能问题,HTTP/1.1 进行了一系列重要的改进。它引入了持久连接(Keep-Alive),允许在一个 TCP 连接上进行多个 HTTP 请求和响应的交互,减少了建立和关闭连接的开销,提高了网络传输效率。同时,还增加了更多的请求方法(如 PUT、DELETE 等)和头部字段,进一步增强了协议的功能和灵活性。HTTP/1.1 成为了应用最广泛且持续时间最长的 HTTP 版本,至今仍在许多场景中被大量使用,但随着网络技术的不断发展和应用需求的日益增长,它也逐渐暴露出一些性能瓶颈。

2.4 HTTP/2

HTTP/2 在性能优化方面迈出了重大一步。它采用了二进制分帧层,将 HTTP 消息分解为更小的帧进行传输,这些帧可以在同一个 TCP 连接上交错发送和接收,从而实现了多路复用,大大提高了资源的并行传输能力,进一步提升了网络性能。同时,HTTP/2 还支持服务器推送,服务器可以主动向客户端推送资源,减少了客户端请求的延迟。不过,HTTP/2 的推广和应用也面临一些挑战,例如对服务器和客户端的实现要求较高,部分老旧的网络基础设施和设备可能无法很好地支持它。

2.5 HTTP/3

为了克服 HTTP/2 在 TCP 协议上的一些性能限制,HTTP/3 基于 UDP 协议进行了全新的设计,引入了 QUIC 协议。QUIC 协议在 UDP 之上实现了类似 TCP 的可靠传输功能,同时还具备更低的延迟、更好的连接迁移能力以及对网络拥塞的优化控制。HTTP/3 继承了 HTTP/2 的许多优秀特性,如二进制分帧、多路复用和服务器推送等,并通过 QUIC 协议进一步提升了性能和可靠性。目前,HTTP/3 正在逐渐得到广泛的应用和支持,有望成为未来网络通信的主流协议之一。

3. HTTP 的基本特点

3.1 无状态

HTTP 的无状态特性是指协议对于事务处理没有记忆能力。每一次的 HTTP 请求都是独立的,服务器不会记住之前的请求信息,也不会在不同的请求之间保留任何状态数据。

例如,当你在一个电商网站上先后将两件商品加入购物车,对于服务器来说,这是两个完全独立的 HTTP 请求,它不会自动关联这两个操作,因为 HTTP 协议本身并不知道这两个请求来自同一个用户的同一次购物行为。这种无状态性使得服务器的设计更加简单高效,能够轻松应对大量并发的请求。但在某些需要保持用户状态的应用场景中,如用户登录后的权限管理、购物车功能等,就需要通过其他技术手段(如使用 Cookie、Session 等)来在客户端和服务器之间维护状态信息。

3.2 无连接

在 HTTP/1.0 中,默认采用的是无连接的方式,即客户端与服务器在完成一次 HTTP 请求和响应后,会立即关闭连接。这种方式在每次请求都需要重新建立连接,虽然简单直接,但在请求频繁的情况下,会造成较大的性能开销,因为建立和关闭 TCP 连接需要消耗一定的时间和资源。

而在 HTTP/1.1 及以后的版本中,引入了持久连接(Keep-Alive)来改善这一问题,使得在一个 TCP 连接上可以进行多次 HTTP 请求和响应的交互,减少了连接建立和关闭的次数,从而提高了网络传输效率。但从协议本身的设计初衷来看,HTTP 最初是基于无连接的理念构建的,这种理念在一定程度上简化了服务器的实现和资源管理,同时也使得 HTTP 能够更灵活地适应不同的网络环境和应用场景。

HTTP 作为网络通信领域的重要协议,从诞生之初到不断发展演变,始终在适应着互联网的发展需求。了解 HTTP 的定义、作用、发展历史和基本特点,不仅有助于我们深入理解网络通信的原理,更能为我们在开发高效、稳定的网络应用时提供有力的理论支持和实践指导。随着技术的不断进步,HTTP 协议也将继续进化,为构建更加智能、便捷的网络世界贡献力量。

3.3 基于请求 - 响应模型

  • 工作方式:客户端发起请求,服务器接收请求后进行处理并返回响应。例如,当用户在浏览器中访问一个网页时,浏览器会构建一个HTTP请求,这个请求包含请求方法(如GET、POST等)、请求URL、请求头和请求体(如果是POST等方法可能有)等信息。服务器根据请求中的信息,查找相应的资源,然后构建一个HTTP响应,其中包含状态码、响应头和响应体(如网页内容、文件数据等),并将其发送回客户端。
  • 优点:这种模型简单直观,使得客户端和服务器之间的交互逻辑清晰。开发人员可以很容易地理解和实现通信过程,方便构建各种网络应用。而且它允许服务器对不同的请求进行不同的处理,具有很好的灵活性。
  • 应用场景:广泛应用于各种网络服务,如网页浏览、API调用等。在网页浏览中,浏览器根据用户输入的网址或者操作(如点击链接、提交表单)发送请求,服务器返回对应的网页或者处理结果。在API调用场景下,客户端(如移动应用、其他服务器等)通过HTTP请求向提供API的服务器获取或更新数据。

3.4 简单性和通用性

  • 协议格式简单:HTTP是一种基于文本的协议,它的请求和响应消息格式相对简单,易于理解和实现。例如,一个简单的HTTP GET请求可能如下所示:

    1
    2
    GET /index.html HTTP/1.1
    Host: www.example.com

    这是一个请求获取www.example.com网站的index.html文件的HTTP请求。第一行是请求行,包含请求方法(GET)、请求的资源路径(/index.html)和协议版本(HTTP/1.1)。后面的行是请求头,这里的Host头指定了请求的目标主机。

  • 通用性高:几乎所有的网络编程语言都提供了对HTTP的支持,无论是Python(通过requests库等)、Java(通过java.net.HttpURLConnection等)还是JavaScript(在浏览器中通过XMLHttpRequest或者fetch API)。这使得不同平台和语言编写的客户端和服务器能够很容易地进行通信。

  • 优点:由于简单性,开发人员可以快速上手,降低了开发网络应用的难度。通用性使得HTTP能够在各种不同的设备和系统中广泛应用,促进了网络的互联互通。

  • 应用场景:在物联网设备中,简单的传感器设备可以使用HTTP将采集的数据发送到服务器,或者接收服务器的控制指令。小型的Web应用开发,尤其是初学者或者快速原型开发,利用HTTP的简单性可以快速搭建起基本的功能架构。

3.5 可扩展性

  • 协议扩展机制:HTTP允许通过添加新的请求方法、头部字段等来扩展其功能。例如,随着Web应用的发展,出现了新的请求方法如PATCH(用于部分更新资源)。同时,自定义的头部字段也可以用于在客户端和服务器之间传递特定的元数据。
  • 版本更新支持进步:从HTTP/0.9到HTTP/3的发展历程也体现了它的可扩展性。每个新版本都在保留基本的通信模式的基础上,对性能、功能等方面进行了扩展和优化。例如,HTTP/2的二进制分帧和多路复用就是对原有协议传输机制的重大扩展,提高了协议的性能和效率。
  • 优点:能够适应不断变化的网络应用需求。随着技术的发展,如移动互联网、云计算、物联网等新兴领域的出现,HTTP可以通过扩展来满足这些新场景下的数据传输和交互需求。
  • 应用场景:在现代的微服务架构中,HTTP可以通过扩展来支持服务之间的复杂通信和协调。例如,在一个包含多个微服务的电商系统中,不同微服务之间(如用户服务、商品服务、订单服务等)可以通过自定义的HTTP请求方法和头部字段来实现高效的业务逻辑交互。

文章合集:chongzicbo/ReadWriteThink: 博学而笃志,切问而近思 (github.com)

个人博客:程博仕

微信公众号:

微信公众号


HTTP基础01:HTTP协议概述
https://chongzicbo.github.io/2024/12/30/计算机基础/计算机网络/HTTP基础01:HTTP协议概述/
Author
程博
Posted on
December 30, 2024
Licensed under