什么是 HTTP 协议?

​HTTP​​ 的全称是 ​​超文本传输协议​​。它是一种用于分布式、协作式和超媒体信息系统的​​应用层​​协议。简单来说,HTTP 是万维网(WWW)的数据通信基础,它定义了客户端(例如 Web 浏览器)和服务器之间请求和响应的格式与规则。

没有 HTTP,我们就无法通过点击链接或输入网址来浏览网页。

核心特点

  1. ​客户端-服务器模型​​:通信由客户端(请求方)发起,服务器(提供方)响应。

  2. ​无状态​​:HTTP 协议本身不会保留之前每次通信的状态。这意味着每个请求都是独立的,服务器不会记住之前的请求。(为了实现状态保持,我们使用 Cookie 和 Session 等技术)。

  3. ​简单快速​​:HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。

  4. ​灵活​​:HTTP 允许传输任意类型的数据对象(如文本、图片、音频、视频),并由 Content-Type标头进行标识。

HTTP 的工作原理:请求与响应

一次完整的 HTTP 通信过程通常包括以下步骤:

  1. ​建立 TCP 连接​​:客户端(浏览器)首先与服务器在特定端口(默认是 80)建立一个 TCP 连接。

  2. ​发送 HTTP 请求​​:客户端向服务器发送一个请求报文。

  3. ​服务器处理请求​​:服务器收到请求后进行处理。

  4. ​返回 HTTP 响应​​:服务器将处理结果封装成一个响应报文返回给客户端。

  5. ​关闭 TCP 连接​​:一旦响应送达,连接通常会被关闭(在 HTTP/1.1 中,连接可能被保持以供复用)。

  6. ​客户端解析渲染​​:客户端(浏览器)解析响应内容,并将网页呈现给用户。

HTTP 报文结构

1. HTTP 请求报文

一个 HTTP 请求由以下部分组成:

  • ​请求行​​:包含请求方法(如 GET、POST)、请求的 URL 和 HTTP 版本。

    • 示例:GET /index.html HTTP/1.1

  • ​请求头​​:包含关于请求的附加信息,以键值对的形式出现。

    • 常见标头:Host(目标主机)、User-Agent(客户端信息)、Accept(客户端能接收的内容类型)。

  • ​空行​​:分隔头部和主体。

  • ​请求体​​:可选部分,主要用于 POST、PUT 等方法,包含要发送给服务器的数据(如表单数据)。

​示例:​

2. HTTP 响应报文

一个 HTTP 响应由以下部分组成:

  • ​状态行​​:包含 HTTP 版本、状态码和状态描述。

    • 示例:HTTP/1.1 200 OK

  • ​响应头​​:包含关于响应的元信息。

    • 常见标头:Content-Type(响应体的类型)、Content-Length(响应体的长度)、Set-Cookie(设置 Cookie)。

  • ​空行​​:分隔头部和主体。

  • ​响应体​​:服务器返回给客户端的实际数据(如 HTML 页面、图片等)。

​示例:​


常见的 HTTP 请求方法

方法

描述

​GET​

请求指定的资源。只用于获取数据,不应有副作用。

​POST​

向服务器提交数据(例如提交表单或上传文件)。数据包含在请求体中。

​PUT​

用请求有效负载替换目标资源的所有当前表示。

​DELETE​

删除指定的资源。

​HEAD​

与 GET 相同,但服务器只返回状态行和头部分,不返回实体主体。用于检查资源是否存在。

重要的 HTTP 状态码

状态码用于表示请求的处理结果,分为五类:

分类

描述

常见状态码

​1xx​

信息性

100(继续)

​2xx​

成功

​200(OK)​​, 201(已创建)

​3xx​

重定向

​301(永久移动)​​, ​​302(临时移动)​​, 304(未修改)

​4xx​

客户端错误

​404(未找到)​​, ​​403(禁止访问)​​, 400(错误请求)

​5xx​

服务器错误

​500(内部服务器错误)​​, 502(错误网关)

HTTP 的发展:从 HTTP/1.1 到 HTTP/3

  • ​HTTP/1.0​​:每个请求/响应都需要建立一个新的 TCP 连接,效率低下。

  • ​HTTP/1.1(最广泛使用的版本)​​:

    • ​持久连接​​:默认保持 TCP 连接打开,允许多个请求/响应通过同一个连接发送。

    • ​管道化​​:允许客户端在收到上一个响应之前发送下一个请求(但存在队头阻塞问题)。

    • ​主机头​​:支持虚拟主机(一个服务器托管多个网站)。

  • ​HTTP/2​​:

    • ​二进制协议​​:不再使用纯文本,解析更高效。

    • ​多路复用​​:在同一个连接上同时进行多个请求和响应,彻底解决了 HTTP/1.1 的队头阻塞问题。

    • ​头部压缩​​:减小开销。

    • ​服务器推送​​:服务器可以主动将资源推送给客户端。

  • ​HTTP/3​​:

    • 将底层传输协议从 ​​TCP​​ 改为基于 UDP 的 ​​QUIC​​ 协议。

    • 解决了 TCP 连接建立的延迟和队头阻塞问题(在传输层),连接迁移能力更强。

总结

HTTP 是互联网应用最广泛的协议,是 Web 浏览的基石。它通过简单的​​请求-响应​​模型,实现了客户端与服务器之间的高效通信。从无状态的 HTTP/1.1 到高性能的 HTTP/2 和革命性的 HTTP/3,其演进始终围绕着提升速度、安全性和用户体验。要深入了解 Web 开发,掌握 HTTP 是必不可少的第一步。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐