> ## Content Index
> Fetch the complete content index at: https://huizhou92.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 相同的负载, HTTPS数据包可能比 HTTP大10倍
- URL: https://huizhou92.com/xiang-tong-de-fu-zai-httpsshu-ju-bao-ke-neng-bi-httpda-10bei/
- Published: 2025-01-06T08:06:24.000Z
- Updated: 2026-09-06T11:40:37.000Z
- Description: 相同的负载, HTTPS数据包可能比 HTTP大10倍. 缘起 最近上线了一个新服务，有一个采集接口占用的带宽比较多，这个接口很简单，我有点好奇，一个https 请求会传输多少数据, 他会比HTTP请求多多少数据？ 我写了一个demo在本地测试一下 func helloHandler(w http.Respo。
- Author: huizhou92
- Tags: tech, https, #lang-zh-cn

## 缘起

最近上线了一个新服务，有一个采集接口占用的带宽比较多，这个接口很简单，我有点好奇，一个https 请求会传输多少数据, 他会比HTTP请求多多少数据？

我写了一个demo在本地测试一下

```go
func helloHandler(w http.ResponseWriter, r *http.Request) {  
    fmt.Fprintf(w, "Hello, World!")  
}  
  
var port int  
  
func init() {  
    flag.IntVar(&port, "port", 8082, "port to listen on")  
    flag.Parse()  
}  
func main() {  
  
    http.HandleFunc("/", helloHandler)  
    fmt.Println(fmt.Sprintf("Starting server at port %d", port))  
    if err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil); err != nil {  
       fmt.Println("Error starting server:", err)  
    }  
}

```

然后在本地使用 caddy 提供https

```caddyfile
http://your-domain.com {
    reverse_proxy 127.0.0.1:8082
}

https://your-domain.com {
    reverse_proxy 127.0.0.1:8082
    tls internal
}

```

最后用`wireshark`抓包，我惊奇的发现。 一个简单的HTTPS 请求会传输2164 个 bytes 数据。  
![](https://images.hxzhouh.com/blog-images/2025/01/442bcfa31abba1c1a771f435d415659d.webp)  
假设 并发为500QPS，那么这个接口所需要的带宽为：  
2164×8×500/1000000 ≈ 8.656Mbps

HTTPS全称是：HTTP over TLS，每次建立新的TCP连接通常需要进行一次完整的`TLS Handshake`。在握手过程中，客户端和服务器需要交换证书、公钥、加密算法等信息，这些数据占用了较多的字节数。  
TLS Handshake的内容主要包括：

- 客户端和服务器的随机数
- 支持的加密算法和TLS版本信息
- 服务器的数字证书（包含公钥）
- 用于生成对称密钥的“Pre-Master Secret”  
这个过程不仅耗时，还会消耗带宽和CPU资源。  
因此想到最粗暴的解决方案也比较简单，就是直接使用 HTTP，省去TLS Handshake的过程，那么自然就不会有 TLS 的传输了。  
那么是否真的有效呢？验证一下就知道。

![](https://images.hxzhouh.com/blog-images/2025/01/eecd3a5e5a5a840fc06f372007717e6c.webp)  
相同的请求，http接口只需要` 223 bytes`，大约只需要`https`请求的 1/10。

## 结论

在绝大多数情况下，HTTPS 是首选，提供了更好的安全性和SEO，但是在一些内部网络或者高性能需求的受控环境，还有传输非敏感数据的时候，比如内网数据采集等，可以选择使用HTTP来优化性能。  
当然，https 也可以优化 `TLS Handshake` 这个过程，那就是 `Keep-Alive` 。`Keep-Alive`是一种连接复用机制，允许在一次 TCP 连接上进行多次请求-响应交互，而无需为每个请求都建立新的连接。它显著减少了 HTTPS 中的连接建立和关闭开销，提升性能。