为什么 APT 并非每次下载都使用 CONNECT
普通的 HTTP 转发和 HTTPS 隧道使用的是不同的代理会话。仅支持 CONNECT 的服务可能不支持 HTTP 仓库发出的请求。
“代理接受 CONNECT”并不意味着它会接受 APT 发送的每一个请求。
对于普通的 HTTP 仓库,APT 可以使用常规的 HTTP 代理转发:代理收到一个指明目标资源的 HTTP 请求。对于通过 HTTP 代理访问的 HTTPS,客户端通常会建立 CONNECT 隧道,然后通过该隧道协商目标的 TLS 会话。
| 目标 | 与 HTTP 代理的典型会话 |
|---|---|
| HTTP 仓库 | 转发 HTTP 请求 |
| HTTPS 仓库 | CONNECT,然后是目标 TLS |
只接受隧道的服务可能会拒绝普通的转发请求。HTTP 405 值得查看实际使用的方法、响应的发出方以及代理策略;它并不能证明 APT 缺少 SOCKS 支持,也不能证明其密码有误。
将服务所支持的行为与 APT 传输文档以及 CONNECT 语义 进行比较。请使用兼容的、经批准的服务或受支持的仓库 URL。对于允许公共中间人的公共仓库,HTTP 代理列表 提供了可供对照这些要求进行检查的候选。不要以为在代理地址中加上 https:// 就会改变仓库的协议,或把每个请求都变成隧道。