HTTP/2 协议
适用于 Delphi 与 C++Builder 的原生 HTTP/2 客户端与服务端。二进制帧、流多路复用、HPACK 标头压缩与 ALPN 协商 — 无需依赖 IIS、Apache 或 Indy。
适用于 Delphi 与 C++Builder 的原生 HTTP/2 客户端与服务端。二进制帧、流多路复用、HPACK 标头压缩与 ALPN 协商 — 无需依赖 IIS、Apache 或 Indy。
两款生产可用的组件完整实现了 HTTP/2 (RFC 9113) 线路协议。使用客户端来消费 HTTP/2 API,使用服务端来发布它们 — 或者在同一个应用程序中同时使用两者。
原生 HTTP/2 客户端 — 在单条 TLS 连接上多路复用 GET/POST/PUT/DELETE 请求,HPACK 压缩的标头,通过 ALPN 升级 h2 或先验知识 h2c,处理服务器推送,并支持 bearer / basic / NTLM 认证。
原生 HTTP/2 服务端 — 同一个 WebSocket HTTP 服务端可在一个 TLS 端口上同时提供 HTTP/1.1、HTTP/2 (h2) 与 WebSocket 服务。包含 ALPN 协商、流多路复用、HPACK 响应以及可选的 RFC 8441 WebSocket over HTTP/2 引导。
将 HTTP/2 帧处理一流地集成进客户端与 WebSocket HTTP 服务端。
TsgcHTTP2ClientTsgcWebSocketHTTPServer
Windows, macOS, Linux, iOS, Android
客户端:Standard / Pro / Enterprise
服务端:Pro / Enterprise
HTTP/2 相对于 HTTP/1.1 的所有优势 — 以原生 Delphi/C++Builder 代码实现,无需启动独立的 Web 服务器。
请求与响应被拆分为二进制帧,由确定性状态机解析。不再有文本行解析或 HTTP/1.1 的歧义问题。
数十个在途请求共享单条 TCP/TLS 连接 — 在 HTTP 层无队头阻塞,无需为每个请求新建额外的套接字。
内置 HPACK 编/解码器 (RFC 7541)。重复的 cookie、认证令牌与 content-type 标头在首次请求之后几乎不占用字节。
在 TLS 握手期间,对端会公告 h2 与 http/1.1;协商出的 ALPN 值用于选择协议,且不浪费任何往返。
对于可信的内部链路与服务网格 sidecar,双方可跳过 ALPN,通过 HTTP2_PriorKnowledge 直接基于明文启动 HTTP/2。
服务端可主动发送 PUSH_PROMISE 响应;客户端通过 OnHTTP2StreamData 暴露这些响应以便缓存。注意:在公共 Web 上已弃用,但在内部场景仍然有用。
每流的优先级与依赖提示让关键响应(认证、导航、JSON-RPC 结果)能在同一连接上优先于大批量传输。
每流与每连接的 WINDOW_UPDATE 流量控制能避免一个大响应饿死较小的响应 — 可通过 SETTINGS 帧调优。
将 TLSOptions.IOHandler 设置为 iohSChannel 即可使用 Windows 内核 TLS(无需 DLL),或设置为 iohOpenSSL 以获得完整的跨平台 1.2/1.3 支持。
在以下场景中,HTTP/2 的多路复用与 HPACK 节省可立竿见影。
Apple 的 APNs Provider API 要求使用 HTTP/2。TsgcHTTP2Client 端到端驱动 Apple Push 组件并支持基于令牌的认证。
Google 的 FCM HTTP v1 API 运行在 HTTP/2 之上。同一组件为 FCM 提供动力,并支持服务账户 JWT 生成。
大多数云 API(Stripe、GitHub、Cloudflare、Google、Azure…)默认使用 HTTP/2 — 多路复用客户端可降低并行调用的延迟。
位于 sidecar 网格之后的内部微服务通过 HTTP/2 先验知识 (h2c) 在同一个套接字上多路复用数百个 RPC 流。
TsgcWebSocketHTTPServer 在单一 TLS 端点上提供 HTTP/1.1、HTTP/2 与 WebSocket — ALPN 自动为每个连接路由。
对于倾向于在 HTTP/2 流内隧道 WebSocket 帧的客户端,可在服务端启用 Specifications.RFC8441。
放下组件,设置 TLS,启动。握手期间 ALPN 会为您协商出 h2。
uses
sgcHTTP, sgcHTTP2;
var
HTTP2: TsgcHTTP2Client;
begin
HTTP2 := TsgcHTTP2Client.Create(nil);
HTTP2.TLSOptions.IOHandler := iohSChannel; // 或 iohOpenSSL
HTTP2.TLSOptions.Version := tls1_2;
// 添加自定义标头(由 HPACK 压缩)
HTTP2.Request.CustomHeaders.Add('authorization: Bearer eyJ...');
// 通过 HTTP/2 发送 GET(ALPN 协商 h2)
Memo1.Text := HTTP2.Get('https://api.example.com/v1/items');
ShowMessage(IntToStr(HTTP2.Response.Status));
end;
uses
sgcWebSocket;
var
Server: TsgcWebSocketHTTPServer;
begin
Server := TsgcWebSocketHTTPServer.Create(nil);
Server.Port := 443;
Server.SSL := True;
Server.SSLOptions.CertFile := 'cert.pem';
Server.SSLOptions.KeyFile := 'key.pem';
// HTTP/1.1、HTTP/2 与 WebSocket 共用同一 TLS 端口
Server.Specifications.HTTP := True;
Server.Specifications.HTTP2 := True;
Server.Specifications.RFC6455 := True;
Server.Active := True;
end;
// uses: sgcHTTP, sgcHTTP2
TsgcHTTP2Client *HTTP2 = new TsgcHTTP2Client(this);
HTTP2->TLSOptions->IOHandler = iohSChannel;
HTTP2->Request->CustomHeaders->Add("authorization: Bearer eyJ...");
Memo1->Text = HTTP2->Get("https://api.example.com/v1/items");
直达组件页面、在线帮助以及试用版中自带的可直接运行演示项目。
| HTTP/2 客户端 — TsgcHTTP2Client 组件页面:客户端的特性、代码示例与 TLS 选项。 | 打开 | |
| HTTP/2 服务端 — TsgcWebSocketHTTPServer 组件页面:如何在同一 TLS 端口上与 HTTP/1.1 和 WebSocket 一起启用 HTTP/2。 | 打开 | |
| 在线帮助 — HTTP/2 HTTP/2 组件的完整属性、方法与事件参考。 | 打开 | |
| 演示项目 — Demos\20.HTTP_Protocol\01.HTTP2_Server_And_Client 可直接运行的示例项目。随 sgcWebSockets 包一同提供 — 请在下方下载试用版。 | 打开 | |
| 用户手册 (PDF) 涵盖库中每个组件的完整手册。 | 打开 |