目录

ylong_http

ylong_http 是 OpenHarmony 网络组件使用的 Rust HTTP 协议栈。本工作区包含:

  • ylong_http:HTTP 协议类型、编解码器、Header、Body、HPACK/QPACK,以及 HTTP/1.1–HTTP/3 基础组件;
  • ylong_http_client:同步/异步客户端、连接池、TLS 适配、重定向、代理路由、 上传和下载能力。

English · 用户指南

HTTPS 代理能力

https_impl 功能分支为异步 HTTP/1.1 与 HTTP/2 客户端增加了工程化 HTTPS 代理支持:

  • 验证代理服务器证书和主机名;
  • 使用客户端证书与私钥完成代理 mTLS;
  • 独立配置 proxy/origin 的 CA、SNI、TLS 版本、算法套件和 ALPN;
  • 支持 HTTP forward,以及 HTTP/1.1、HTTP/2 CONNECT 隧道;
  • 提供结构化、对象安全的 Proxy 扩展接口;
  • 按路由、代理端点、认证和 TLS 身份隔离连接池;
  • 错误保留底层 OpenSSL/IO source,同时给出明确阶段。

HTTPS proxy 访问 HTTPS origin 时存在两个互相独立的 TLS 会话:

client -- proxy TLS --> proxy -- CONNECT tunnel --> origin TLS --> origin

外层证书验证代理,隧道内证书验证源站;proxy mTLS 客户端凭据不会被误用于源站。

Proxy 架构

Proxy::match_route 对每个请求只选择一次完整路由:

pub trait Proxy: Send + Sync {
    fn match_route(&self, uri: &Uri) -> Option<ProxyRoute>;
}

同一个 ProxyRoute 被连接池、连接器、TLS、认证和请求目标格式共同使用。

路由 连接行为 HTTP/1.1 target form
Direct 直连源站 origin-form
Forward 连接代理并直接发送请求 absolute-form
Tunnel 连接代理、执行 CONNECT、再使用隧道 origin-form

扩展新协议时必须提供真实路由和执行路径。未实现能力明确失败,不会静默直连,也不以 Legacy 空壳伪装兼容。

快速使用

构建

OpenSSL 3、异步 HTTP/1.1 与 HTTP/2:

cargo build -p ylong_http_client \
  --features "async http1_1 http2 tokio_base c_openssl_3_0"

无 TLS 构建:

cargo build -p ylong_http_client \
  --features "async http1_1 http2 tokio_base"

验证 HTTPS 代理服务器

use ylong_http_client::async_impl::Client;
use ylong_http_client::{HttpClientError, HttpProxy};

fn build_client() -> Result<Client, HttpClientError> {
    let proxy = HttpProxy::all("https://proxy.example.com:8443")
        .proxy_ca_file("certs/proxy-ca.pem")
        .proxy_http1_alpn()
        .build()?;

    Client::builder().proxy(proxy).build()
}

HTTPS 代理 mTLS

use ylong_http_client::async_impl::Client;
use ylong_http_client::{
    AlpnProtocol, AlpnProtocolList, HttpClientError, HttpProxy, TlsFileType,
    TlsVersion,
};

fn build_mtls_client() -> Result<Client, HttpClientError> {
    let proxy_alpn = AlpnProtocolList::new()
        .extend(AlpnProtocol::H2)
        .extend(AlpnProtocol::HTTP11);
    let proxy = HttpProxy::all("https://proxy.example.com:8443")
        .proxy_ca_file("certs/proxy-ca.pem")
        .proxy_client_certificate_chain_file("certs/client-chain.pem")
        .proxy_client_private_key_file("certs/client-key.pem", TlsFileType::PEM)
        .proxy_min_tls_version(TlsVersion::TLS_1_2)
        .proxy_max_tls_version(TlsVersion::TLS_1_3)
        .proxy_cipher_list("ECDHE+AESGCM:ECDHE+CHACHA20")
        .proxy_cipher_suite("TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
        .proxy_alpn_protocols(proxy_alpn)
        .build()?;

    Client::builder().proxy(proxy).build()
}

proxy_danger_accept_invalid_certs(true) 只能用于隔离测试;它会关闭代理证书验证, 不能作为生产环境的配置捷径。

验证命令

cargo fmt --all -- --check
cargo check -p ylong_http_client \
  --features "async http1_1 http2 tokio_base"
cargo test -p ylong_http_client \
  --features "async http1_1 http2 tokio_base c_openssl_3_0"
cargo test -p ylong_http \
  --features "http1_1 http2 huffman tokio_base"

正式集成测试覆盖 forward、CONNECT、代理 mTLS、TLS 错误、HTTP/1.1、HTTP/2、 隧道背压和自定义 Proxy。

范围

本次交付验收异步 HTTP/1.1、HTTP/2 下的 HTTPS proxy。同步客户端和 HTTP/3 的 HTTPS proxy 适配不在本次范围内。当前支持 HTTP Basic 代理认证;其他认证协议必须 单独完整实现。

许可证

Apache License 2.0,参见 LICENSE。

关于

ylong_http 是一个用 Rust 编写的 HTTP 协议栈,核心亮点是其 高性能 HTTPS 代理模块 。 该项目最初为 OpenHarmony 系统构建,在 HTTPS 代理 方向完成了以下关键能力: - TLS 代理通信 :基于 OpenSSL 实现,支持代理服务器单向/双向证书验证 - 灵活的 TLS 配置 :支持客户端证书、私钥、算法套件等自定义配置 - 模块化代理架构 :将代

2.3 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号