重要概念

理解HTTP:网络通信的支柱

10 分钟阅读
May 29, 2025

HTTP(超文本传输协议)是万维网上数据通信的基础。作为OTT(超越顶层)和RTC(实时通信)技术中的一个关键组成部分,理解HTTP对于在这些领域工作的开发人员和工程师至关重要。本文将深入探讨HTTP的复杂性、其结构及其在流媒体技术如HLS(HTTP实时流媒体)中的应用。

什么是HTTP?

HTTP是一种构建在TCP之上的应用层协议。它是互联网上使用最广泛的协议,促进超文本文档、图像、视频和其他多媒体内容的传输。HTTPS(安全HTTP)是HTTP的安全版本,使用SSL/TLS加密进行数据传输。

HTTP URL结构

HTTP资源通过统一资源定位符(URL)进行标识。一个典型的HTTP URL具有以下结构:

http://host[:port]/[path/]filename[?param1=value1&param2=value2][#fragment]
  • http://: 表示使用HTTP协议(或https://表示使用HTTPS)
  • host: 服务器的域名或IP地址
  • port: 端口号(HTTP的默认端口为80,HTTPS为443)
  • path: 服务器上资源的路径
  • filename: 资源的名称
  • param, value: 查询参数
  • fragment: 资源的特定部分,通常称为锚点

HTTP通信

HTTP通信涉及来自客户端(用户代理)的请求和来自服务器(源服务器)的响应。客户端与服务器之间可能存在代理服务器、网关或隧道等中介。

HTTP请求结构

一个HTTP请求由三个部分组成:

  1. 请求行
  2. 消息头
  3. 请求体

HTTP请求示例:

POST /index.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml, application/xml; q=0.9,*/*; q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length: 26
Content-Type: application/x-www-form-urlencoded

username=abc&password=1234

HTTP响应结构

一个HTTP响应也由三个部分组成:

  1. 状态行
  2. 消息头
  3. 响应体

HTTP响应示例:

HTTP/1.1 200 OK
Date: Sun, 17 Mar 2013 08:12:54 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: keep-alive
Content-Type: text/html; charset=utf-8

<html>
<head>
<title>HTTP响应示例</title>
</head>
<body>
你好,HTTP!
</body>
</html>

HTTP状态码

HTTP状态码是服务器在响应客户端请求时返回的三位数字。它们分为五个类别:

状态码描述含义
1XX信息性请求已接收,继续处理
2XX成功操作已成功接收、理解并接受
3XX重定向需要进一步采取行动以完成请求
4XX客户端错误请求包含错误语法或无法满足
5XX服务器错误服务器未能满足明显有效的请求

以下是一些常见状态码:

状态码文本描述
200成功请求成功
206部分内容部分内容已交付
301永久移动请求的URL已永久移动
302找到临时URL重定向
304未修改自上次请求以来资源未修改
400错误请求服务器无法处理由于客户端错误的请求
403禁止服务器拒绝授权请求
404未找到请求的资源找不到
500内部服务器错误当服务器失败时的通用错误消息
502错误网关服务器从上游服务器收到无效响应
503服务不可用服务器暂时无法处理请求

有关更多信息,请参考

HTTP在流媒体中的应用:HLS(HTTP实时流媒体)

HLS是一种由苹果公司开发的流媒体协议,它利用HTTP进行媒体传输。其工作原理是将整体流分解为一系列小的基于HTTP的文件下载。

HLS工作流程

HTTP流媒体:HLS(HTTP实时流媒体)工作流程

1. 客户端发送HTTP GET请求以获取m3u8文件。
2. 服务器响应m3u8文件。

  1. 客户端首先检索主播放列表文件(M3U8)。
  2. M3U8文件包含媒体段文件(TS文件)的URL。
  3. 客户端随后通过HTTP下载这些TS文件。
  4. 对于实时流媒体,客户端持续更新M3U8文件以获取新的TS文件URL。

M3U8文件结构

M3U8文件是基于文本的,由一系列标签组成。以下是一个示例:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:10,
http://media.example.com/segment0.ts
#EXTINF:10,
http://media.example.com/segment1.ts
#EXTINF:10,
http://media.example.com/segment2.ts
#EXT-X-ENDLIST

以下是常见M3U8标签的表格:

标签含义
#EXTM3U必须是每个M3U8文件的第一行
#EXTINF指定TS文件的持续时间
#EXT-X-TARGETDURATION指定任何TS文件的最大持续时间
#EXT-X-MEDIA-SEQUENCE指定第一个TS文件的序列号
#EXT-X-KEY指定TS文件的加密方法
#EXT-X-PROGRAM-DATE-TIME指定TS文件中第一个样本的日期/时间
#EXT-X-ALLOW-CACHE指定客户端是否可以缓存下载的媒体文件
#EXT-X-PLAYLIST-TYPE提供关于播放列表类型的信息(事件或点播)
#EXT-X-ENDLIST指示M3U8文件的结束

HTTP动态直播流(HDL)

HTTP动态直播流(HDL),更常被称为HTTP-FLV,是一种由Adobe开发的流媒体协议。它利用HTTP在线传输FLV(Flash视频)文件,使其成为网页流媒体领域的重要技术。

HDL的工作原理类似于HLS(HTTP实时流媒体)。这两种协议都使用HTTP来检索相关文件,并随后获取相应的音频和视频流数据。然而,HLS使用M3U8和TS文件,而HDL则利用SWF(Shockwave Flash)和FLV文件。这些文件格式由Adobe设计,传统上需要Flash技术支持,这限制了它们在HTML5环境中的直接使用。(在支持MSE的浏览器中,可以使用如flv.js的库来启用支持,但兼容性问题仍需考虑。)

SWF(Shockwave Flash)是由Macromedia(后被Adobe收购)为其Flash动画设计软件开发的一种专有格式。它在网页设计和动画制作中被广泛使用。SWF文件的结构如下:

M3U8文件结构,标签,主播放列表文件,媒体段文件,HTTP动态直播流,HDL,SWF,FLV,HTTP实时流媒体,ts文件在头部之后,有多个标记数据块。标签格式与FLV封装一致。在在线播放过程中,通常只需要检索一个SWF文件。

HDL播放过程遵循以下步骤:

  1. 通过HTTP检索SWF文件
  2. 使用SWF文件获取FLV文件
  3. 解包、解码并显示FLV文件内容
  4. 持续获取和处理FLV文件数据,解码并显示直到达到SWF文件的EndTag

此过程演示了HDL如何利用HTTP不仅用于初始文件检索,还用于整个流媒体过程,使其成为协议功能的重要组成部分。

有关SWF文件的更多详细信息,请参阅Adobe开发者中心

结论

HTTP构成了网络通信的基础,并在现代流媒体技术如HLS中发挥着至关重要的作用。理解其结构、状态码及其在流媒体协议中的应用对在OTT和RTC领域工作的开发人员至关重要。随着网络的不断发展,HTTP仍然是一项基础技术,适应数字通信不断变化的需求和用例。