Qt 把能够建立隧道的 HTTP 代理与其仅用于缓存的 HTTP 代理类型区分开来。两个名称都含 HTTP,但连接能力不同。

Qt 类型连接角色
HttpProxy面向出站 TCP 连接的 HTTP CONNECT 支持
HttpCachingProxy兼容的基于请求的客户端中的普通 HTTP 请求
Socks5Proxy带其已记录传输能力的 SOCKS5 协商

执行普通 HTTP 请求的 QNetworkAccessManager 可以使用面向请求的类型。需要字节隧道的 QTcpSocket 则要求带 TunnelingCapability 的代理。当通用 TCP 套接字必须使用它时,Qt 特别提醒不要在缺少该能力的情况下安装应用默认代理。

在分配端点之前先选择协议类型。对于无需代理认证即可允许的公开 HTTP 请求,HTTP 代理列表提供地址;但 Qt 类型仍必须提供该请求所需的能力。把 CONNECT 服务所用的端口交给 HttpCachingProxy,并不会给这一 Qt 选择补上缺失的能力。

仅缓存的标签同样不保证每个响应都会被远程服务器存储或复用。它描述的是客户端接口所支持的代理使用方式,而缓存复用仍由 HTTP 响应策略决定。

相关文章