HTTP/HTTPS:什么是它,数据传输协议和TLS加密

作者: IT Sectr 发布日期: 2026-03-06 阅读时间: 9 分钟

HTTP/HTTPS — 是基础的数据传输协议,构成了互联网和移动应用中所有通信的基础。HTTP(超文本传输协议)定义了客户端和服务器之间请求和响应的格式,而HTTPS(HTTP安全版)通过TLS(传输层安全协议)或SSL(安全套接层)协议增加了加密。根据Google Transparency Report(2025),全球超过95%的网络流量已经使用HTTPS,Chrome和Safari浏览器将HTTP网站标记为不安全。理解HTTP与HTTPS之间的区别、请求结构和状态码 — 是每个处理网络请求的移动应用开发者的必要条件。

要点

  • HTTP — 用于传输超文本和数据的应用层协议
  • HTTPS — 通过TLS/SSL加密的HTTP,防止窃听
  • HTTP在80端口上工作,HTTPS在443端口上工作
  • HTTPS 提供机密性、完整性和服务器认证
  • 现代版本:HTTP/2(多路复用)和HTTP/3(QUIC)

什么是HTTP和HTTPS?

HTTP(超文本传输协议)— 是OSI模型的应用层协议,用于在万维网上传输超文本文档和其他数据。由蒂姆·伯纳斯-李于1989年开发,HTTP经历了多个版本:从HTTP/0.9(仅GET请求和HTML响应)到现代的HTTP/2和HTTP/3。该协议遵循请求-响应模式:客户端向服务器发送请求,服务器处理请求并返回响应。

HTTPS(HTTP安全版)— 是HTTP协议的扩展,通过TLS(传输层安全协议)增加了加密层。HTTPS不是独立的协议 — 它是HTTP和TLS的组合。通过HTTPS传输的数据在客户端加密并在服务器解密,使其无法被拦截和篡改。HTTPS还通过SSL/TLS证书提供服务器认证,确保客户端连接到真实服务器而不是攻击者。

HTTP和HTTPS之间的关键区别在于安全性。HTTP以明文形式传输数据:客户端和服务器之间的任何网络节点都可以读取请求或响应的内容。HTTPS加密所有内容,包括URL、标头和请求体,只保留服务器的IP地址和连接端口可见。对于通过公共Wi-Fi网络工作的移动应用,HTTPS是强制性的安全要求。

HTTP如何工作

HTTP — 是一种无状态协议,运行在TCP/IP之上。客户端与服务器建立TCP连接(通常HTTP使用80端口,HTTPS使用443端口),发送HTTP请求,接收HTTP响应并关闭连接(在HTTP/1.1中连接可以被重用)。客户端和服务器之间的每次交互都由一个请求和一个响应组成。无状态意味着服务器不存储有关客户端先前请求的信息 — 每个请求都独立处理。

HTTP交互过程包括以下步骤:

  • DNS解析 — 浏览器或客户端通过DNS将域名转换为IP地址
  • TCP握手 — 通过三次握手(SYN、SYN-ACK、ACK)建立TCP连接
  • TLS握手 — 对于HTTPS,额外建立加密连接(证书和密钥交换)
  • HTTP请求 — 客户端发送方法、URL、标头和可选请求体
  • HTTP响应 — 服务器返回状态码、标头和响应体

HTTP的一个重要特性是幂等性。GET、HEAD、PUT、DELETE和OPTIONS是幂等的:多次执行相同的请求不会在第一次执行后改变服务器状态。POST、PATCH和CONNECT不是幂等的 — 每次调用都可以创建新资源或更改状态。对于移动开发,理解幂等性至关重要:当因网络错误重新发送请求时,客户端必须知道重复该请求是否安全。

HTTPS和TLS加密

HTTPS 使用TLS(传输层安全协议)加密协议来保护传输的数据。TLS — 是SSL(安全套接层)的继承者,由Netscape公司于1995年开发。SSL 2.0和3.0版本被认为已过时且不安全;现代版本TLS 1.2(2008年发布)和TLS 1.3(2018年发布)被广泛使用。TLS 1.3尤其将连接建立时间从2次往返减少到1次,这显著加快了移动设备上的加载速度。

TLS握手过程包括以下阶段:

  • Client Hello — 客户端发送支持的TLS版本和密码套件列表
  • Server Hello — 服务器选择TLS版本和密码套件,发送其SSL/TLS证书
  • 证书验证 — 客户端通过信任链验证服务器证书直至根CA
  • 密钥交换 — 客户端和服务器生成共享密钥(会话密钥)
  • 密码套件切换 — 双方确认切换到加密连接

SSL/TLS证书验证 — 对安全至关重要的阶段。客户端检查证书是否:未过期、由受信任的证书颁发机构(CA)签名、与URL中的域名匹配以及未被撤销(通过CRL或OCSP)。在移动应用中,建议使用证书固定 — 绑定到特定证书或服务器的公钥。这即使在CA被攻破的情况下也能防止MITM攻击。然而,固定需要谨慎:当证书更改时,应用程序必须提前更新。

HTTP请求和响应的结构

HTTP请求由三部分组成:起始行(request line)、标头(headers)和可选的主体(body)。起始行包含HTTP方法、请求URL和HTTP版本。标头传递元信息:内容类型、认证令牌、缓存设置。主体仅在传输数据的方法(POST、PUT、PATCH)中存在,在GET和DELETE中不存在。

向REST API发送HTTP请求的示例:

js
POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Cache-Control: no-cache

{
    "name": "安娜",
    "email": "anna@example.com"
}

HTTP响应具有类似的结构:包含HTTP版本和状态码的起始行、标头和主体。状态码 — 确定请求处理结果的三位数字。响应标头包括Content-Type、Content-Length、Cache-Control、Set-Cookie等。响应主体包含以Content-Type中指定的格式(通常是API的JSON、网页的HTML、媒体内容的图像)请求的数据。

标头在HTTP工作中起着关键作用。Content-Type和Accept管理数据格式。Authorization传递访问令牌。Cache-Control管理缓存。CORS标头(Access-Control-Allow-Origin)控制浏览器中来自其他域的访问。User-Agent标识客户端应用程序。对于移动应用,缓存管理标头尤为重要 — 它们减少了传输的数据量并改善了弱信号下的性能。

HTTP状态码

HTTP状态码分为五类,由第一位数字表示:1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)。理解这些代码对于在移动应用中正确处理响应是必要的:2xx表示成功,数据可以显示;4xx表示请求有问题(需要向用户显示错误);5xx — 服务器有问题(需要稍后重试请求)。

代码名称描述客户端操作
200OK请求成功处理数据
201Created资源已创建更新UI
301Moved Permanently资源已移至新URL更新代码中的URL
400Bad Request无效请求显示验证错误
401Unauthorized需要认证重定向到登录
404Not Found资源未找到显示404
429Too Many Requests超过请求限制延迟后重试
500Internal Server Error服务器错误稍后重试

对于移动应用,处理401 Unauthorized代码尤为重要。收到此代码后,客户端应尝试通过刷新令牌更新访问令牌并重试原始请求。如果令牌刷新也返回401,则应将用户重定向到登录屏幕。此逻辑通常在拦截器(OkHttp)或网络客户端的中间件层中实现。

HTTP/1.1、HTTP/2和HTTP/3

HTTP/1.1于1999年发布,至今仍然是广泛使用的协议版本。其主要缺点是队头阻塞:对同一服务器的请求按顺序执行,每个后续请求等待前一个完成。为了绕过此限制,浏览器对同一域打开6–8个并行TCP连接,这增加了服务器负载和内存消耗。HTTP/1.1还以未加密形式传输标头,不支持服务器推送。

HTTP/2(2015)通过多路复用解决了阻塞问题 — 多个数据流通过单个TCP连接同时传输。服务器可以在客户端请求之前向客户端发送资源(服务器推送)。HTTP/2还通过HPACK压缩标头,减少了传输的数据量。对于移动应用,HTTP/2特别有用:一个连接代替多个连接,减少了TLS握手时间和电池消耗。

HTTP/3(2022)— 是最新版本的协议,使用QUIC(快速UDP互联网连接)代替TCP。QUIC运行在UDP之上,消除了传输协议级别的队头阻塞问题。HTTP/3在最佳情况下将连接建立时间减少到0次往返(在重复连接时)和首次连接时的1次往返,这比2–3次往返的HTTP/2快得多。对于移动设备,HTTP/3在Wi-Fi和移动网络之间切换时特别有效 — 连接不会中断,因为QUIC使用连接标识符而不是IP地址。

移动开发中的HTTPS

在移动应用中使用HTTPS — 不是建议,而是强制要求。从Android 9(API 28)和iOS 9(ATS — 应用传输安全)开始,所有网络请求默认必须使用HTTPS。HTTP请求被系统阻止,需要应用程序配置中的显式例外才能允许。Google Play商店和App Store拒绝通过HTTP传输敏感数据的应用程序,包括密码、令牌和个人数据。

Android移动应用中的HTTPS配置包括:

xml
<!-- AndroidManifest.xml — 网络请求权限 -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- network_security_config.xml — HTTPS配置 -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">api.example.com</domain>
        <pin-set expiration="2027-12-31">
            <pin digest="SHA-256">rDjsFv3bGf...</pin>
        </pin-set>
    </domain-config>
</network-security-config>

在iOS上,通过Info.plist中的NSAppTransportSecurity键进行类似配置。用于调试移动应用中的HTTPS流量,使用代理工具:Charles Proxy、Proxyman或mitmproxy。它们需要在设备上安装受信任的SSL证书。在生产构建中,应禁用调试功能,并确保证书固定配置正确。在Android上使用OkHttp及其CertificatePinner,或在iOS上使用TrustManager和SecTrustEvaluate — 是实现固定的标准方法。

移动开发中HTTPS安全的一个重要方面 — SSL固定。没有固定,应用程序信任由已知CA签名的任何证书。如果CA被攻破,攻击者可以拦截应用程序的流量。固定将应用程序绑定到特定证书或服务器的公钥。当服务器上的证书更改时,必须发布应用程序更新,因此固定需要预留计划 — 绑定到上级CA的证书或使用多个备用密钥。

常见问题

HTTP和HTTPS有什么区别?

HTTP以明文形式传输数据,HTTPS通过TLS/SSL加密流量。HTTPS使用443端口,HTTP使用80端口。HTTPS需要SSL证书,并提供机密性、完整性和服务器认证。

在移动应用中必须使用HTTPS吗?

是的,从Android 9iOS 9开始,HTTPS默认是强制性的。HTTP请求会被系统阻止,除非在配置中明确允许。应用商店要求所有包含敏感数据的网络请求使用HTTPS。

什么是SSL证书以及如何获得?

SSL证书 — 确认服务器真实性的数字文档。由证书颁发机构(CA)颁发:Let’s Encrypt(免费)、Sectigo、DigiCert。开发中可以使用自签名证书。

HTTP/2与HTTP/1.1有何不同?

HTTP/2支持多路复用(通过单个TCP连接进行多个请求)、标头压缩(HPACK)和服务器推送。与HTTP/1.1不同,HTTP/1.1中请求会相互阻塞(队头阻塞),HTTP/2并行发送数据。

什么是证书固定以及何时使用?

证书固定 — 一种安全技术,应用程序只信任特定证书或公钥。推荐用于高安全要求的应用程序(银行、支付、医疗数据)。

总结

  • HTTP — 用于在网络上传输数据的应用层协议,运行在TCP/IP之上
  • HTTPS — HTTP + TLS加密,提供机密性和认证
  • HTTP在80端口上工作,HTTPS在443端口上工作
  • 状态码:2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)
  • HTTP/2增加了多路复用和标头压缩,HTTP/3在UDP上使用QUIC
  • 对于移动应用,从Android 9和iOS 9开始HTTPS是强制性的
  • 证书固定通过绑定到特定服务器证书来防止MITM攻击

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读