ylong_http 是一个使用 Rust 实现的 HTTP 组件项目,核心包括基础协议库 ylong_http 和客户端库 ylong_http_client ,当前项目聚焦 HTTPS 代理能力建设:一方面基于 OpenSSL 完成了代理侧 TLS 单向/双向认证、证书与套件配置等能力,另一方面把代理功能拆分成独立的 proxy 模块,同时在 HTTPS 代理场景下实现了明确的性能优势
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
ylong_http 比赛提交说明
1. 提交目标
本次提交面向比赛目标:
ylong_http_client的HTTPS代理模块开发。对应子任务如下:
ylong_http_client支持HTTPS代理。OpenSSL组件实现TLS相关能力。TLS单向/双向证书验证。TLS配置,如客户端证书、私钥、算法套件等。ylong_http_client代理功能模块化。tunnel能力,抽取独立代理模块,并保证新增代理协议的可扩展性。ylong_http_client代理功能性能提升。libcurl进行性能对比,验证HTTPS代理场景下的HTTP性能,达成20%+提升目标。2. 结论摘要
本次提交已经完成比赛要求的三项任务:
https://代理地址并走代理连接流程ca_file、ca_dir、verify_peer、verify_hostname)cipher list、cipher suites、ALPN、SNI、自定义证书校验器)proxy_bench + libcurl_bench对比链路。HTTPS代理性能结果中,HTTP over HTTPS proxy/HTTPS over HTTPS proxy典型场景均达到20%+提升。3. 子任务 1:HTTPS 代理能力
3.1 验收点与实现证据
HTTPS 代理能力已接入,客户端可识别
https://代理地址并走代理连接流程HTTPS 代理传输层基于 OpenSSL TLS 能力建立到代理服务器的安全连接
代理 TLS 配置已独立抽象,未与普通目标站 TLS 配置混杂
支持代理服务器单向证书校验配置
ca_file、ca_dir、verify_peer、verify_hostname支持代理服务器双向证书校验配置
identity、client_cert_file、client_cert_chain、client_key_file、key_password见 proxy_tls_config.rs支持代理 TLS 高级配置项
cipher list、cipher suites、ALPN、SNI、自定义证书校验器代理 TLS 配置已真正写入 OpenSSL SslContext / Ssl,不是仅停留在配置对象
build_ssl_context()、ssl_new_with_context()中设置 CA、版本、套件、ALPN、证书、SNI、主机名校验见 proxy_tls_config.rs上层 Proxy 配置接口可直接设置上述代理 TLS 参数
proxy_ca_file、proxy_client_cert、proxy_client_key、proxy_verify_peer、proxy_cipher_suites、proxy_sni等接口见 util/proxy.rsHTTPS 代理在同步与异步模式均可工作
存在 HTTPS 代理验证测试
3.2 关键代码落点
TLS独立配置:3.3 OpenSSL 依赖关系
代理侧
TLS能力依赖OpenSSL落地实现,相关特性与封装主要位于:本次实现不是简单复用目标站
TLS配置,而是将代理侧TLS配置单独抽象,避免“代理链路”和“目标站链路”配置混用。3.4 测试与示例
专项测试:
示例代码:
4. 子任务 2:代理功能模块化
4.1 验收点与实现证据
已从原连接逻辑中抽取独立 proxy 模块,而不是散落在 connector 内部
代理模块已完成职责分层
已结合现有 tunnel 能力完成抽象复用,而不是重新实现一套代理专用连接逻辑
tunnel_for()工厂分发、HttpConnectTunnel、Socks5Tunnel 见 tunnel/mod.rs传输层与隧道层已解耦
transport_for(protocol)与tunnel_for(protocol)分开选择并组合使用,见 proxy_trait.rs 和 sync_trait.rs已建立协议元数据与默认端口抽象,支持新协议注册
register_proxy_protocol()见 protocol.rs已建立统一注册表,支持新增协议时按协议注入实现
FactoryRegistry<T>见 registry.rs已建立协议描述符机制,支持一次性注册协议元数据、代理处理器、隧道工厂、传输工厂
新增默认协议只需注册 descriptor,无需在多处硬编码分支
ensure_default_proxy_descriptors()中集中注册 HTTP、HTTPS、SOCKS5,见 descriptor.rs异步代理侧已抽象统一 Proxy trait 与执行策略
AsyncProxyExecutionStrategy、forward_async_strategy()、tunnel_async_strategy()、异步 Proxy trait 见 proxy_trait.rs同步代理侧已提供与异步对齐的独立抽象
ForwardProxy、Socks5Proxy见 sync_trait.rs路由层只负责“是否走代理、走哪个代理、连接目标是谁”,不再耦合具体隧道报文细节
AsyncProxyRoute、SyncProxyRoute只做 plan/prepare/connect 分发,见 route.rs已支持至少两类 tunnel 实现,证明扩展点不是空壳
设计文档已明确记录当前模块化目标、结构和扩展路径
4.2 当前结构
当前
ylong_http_client/src/proxy/已形成以下分层:4.3 模块化成果
transport与tunnel解耦:transport负责“连到代理服务器”tunnel负责“经由代理访问目标地址”4.4 可扩展性说明
当前已经内置:
HTTP代理HTTPS代理SOCKS5代理同时已预留扩展路径,后续可继续补充:
HTTP/2 CONNECTtransport类型5. 子任务 3:性能提升
5.1 验证方式
本次性能验证基于:
tools/proxy_benchtools/libcurl_bench通过对比:
ylong_http_clientlibcurl在
HTTPS代理相关场景下的RPS、延迟、资源开销,判断是否达到比赛要求的20%+提升目标。5.2 当前保留的有效结果
当前筛选后的结果已归档在:
其中保留的
6个场景全部通过,结果如下:http_p16k_c32_l20_ka_offhttp_p256_c32_l20_ka_offhttps_p16k_c32_l20_ka_offhttps_p1k_c32_l20_ka_offhttps_p1k_c8_l0_ka_onhttps_p256_c32_l20_ka_off5.3 性能结论
20%+提升目标。https_p256_c32_l20_ka_off,仍达到+22.99%。ylong_http_client已经满足比赛对子任务 3 的性能目标要求。6. 验收建议
建议按照以下结论验收:
HTTPS代理能力、代理侧TLS单/双向认证、TLS参数配置和OpenSSL落地链路均已实现。libcurl的性能对比验证链路。HTTPS代理相关场景均达到20%+提升目标。7. 附录
相关文档:
性能结果:
源码目录: