Python Web开发——HTTP协议简介
什么是 HTTP 协议?
HTTP 的全称是 超文本传输协议。它是一种用于分布式、协作式和超媒体信息系统的应用层协议。简单来说,HTTP 是万维网(WWW)的数据通信基础,它定义了客户端(例如 Web 浏览器)和服务器之间请求和响应的格式与规则。
没有 HTTP,我们就无法通过点击链接或输入网址来浏览网页。
核心特点
-
客户端-服务器模型:通信由客户端(请求方)发起,服务器(提供方)响应。
-
无状态:HTTP 协议本身不会保留之前每次通信的状态。这意味着每个请求都是独立的,服务器不会记住之前的请求。(为了实现状态保持,我们使用 Cookie 和 Session 等技术)。
-
简单快速:HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
-
灵活:HTTP 允许传输任意类型的数据对象(如文本、图片、音频、视频),并由
Content-Type标头进行标识。
HTTP 的工作原理:请求与响应
一次完整的 HTTP 通信过程通常包括以下步骤:
-
建立 TCP 连接:客户端(浏览器)首先与服务器在特定端口(默认是 80)建立一个 TCP 连接。
-
发送 HTTP 请求:客户端向服务器发送一个请求报文。
-
服务器处理请求:服务器收到请求后进行处理。
-
返回 HTTP 响应:服务器将处理结果封装成一个响应报文返回给客户端。
-
关闭 TCP 连接:一旦响应送达,连接通常会被关闭(在 HTTP/1.1 中,连接可能被保持以供复用)。
-
客户端解析渲染:客户端(浏览器)解析响应内容,并将网页呈现给用户。
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 是必不可少的第一步。
更多推荐
所有评论(0)