我正在尝试编写(并理解)一个透明代理。
我的设置看起来像这样
客户端浏览器 ---> TProxy ----> 上游代理 ------> 云
当客户端浏览器发出 GET 请求时,TProxy 将连接到上游代理。上游代理需要摘要身份验证。所以,基本上流程看起来像
Client Browser ---> TProxy --------> Upstream Proxy ---------------> cloud
GET BBC.co.uk
CONNECT
407 PROXY AUTH REQUIRED
CONNECT
(with proxy-authorization)
200 OK
GET BBC.co.uk
我很困惑一旦 CONNECT 授权成功后会发生什么。 我现在是否应该修改原始的 GET 请求以包含 代理授权标头?
或者原始 GET 请求会被隧道传输到另一个 HTTP 标头中,例如
HTTP Header
Proxy Authorization
HTTP Header (GET BBC.CO.UK)
Data
或者我可以直接传递原始的 GET 请求?
当您从透明代理对上游进行身份验证时,
Proxy-Authorization
标头仅适用于 CONNECT。
GET 请求发生在隧道内,因此上游显式代理不应该看到它们,并且肯定不会期望它们上有任何代理身份验证标头。
总之,你不需要担心GET,但不是因为上面给出的答案,而是因为透明代理和站点之间有一条隧道,而显式代理只看到并验证CONNECT。
HTTP 中不存在嵌套标头之类的东西。
代理(无论透明与否)总是终止来自客户端的 HTTP 连接,并向服务器发起一个新连接。
这意味着来自客户端的 HTTP GET 会发送到您的 TProxy。 TProxy 向上游代理创建一个新的 GET 请求。理想情况下,TProxy 将简单地传递所有标头。这将使其(几乎)无法检测到。
响应标头的情况相反。
实际上,代理服务器将并且在许多情况下必须操作某些标头。他们通常会添加自己的标头(例如,提醒通信伙伴存在代理),并且他们还可以操纵现有标头。
因此,对您的问题的简短回答是:无论您的 TProxy 收到什么标头字段,除非您完全理解其含义,否则都将其原封不动地传递。