Pat*_*ick 7 http proxy http-headers cookie
我最近遇到了某种安全设备 (BlueCoat),它要求所有到 Internet 的连接都必须通过它进行代理(你好,中间人),因此使用特殊的 SSL 证书来拦截所有流量。
这阻止了 Git 的正常操作,即使设置了适当的http.proxy
和http.sslCAInfo
属性以确保 SSL 连接本身有效。
使用环境变量GIT_CURL_VERBOSE=1
,我们发现在使用时git clone
,会出现HTTP 407(需要代理认证)。Git 正确完成此身份验证,最后,设备返回带有 cookie 标头的 HTTP 200 Set-Cookie
。
Git 然后将连接到目标服务器,但没有cookie,导致 HTTP 401。
解决这个问题的方法是设置git配置选项 http.saveCookies=true
问题: 中间代理添加cookies真的是RFC标准允许的吗?
Anthony Rich向 http-state 邮件列表提出了同样的问题,但没有任何回应。他确实注意到在
RFC 2965 HTTP 状态管理机制,3.5 缓存代理角色它说:代理不得在代理响应(请求)中引入自己的 Set-Cookie2 (Cookie) 标头。
但是,取代的 RFC 6265根本不再提及这一点。
HTTP cookie 是一团糟。没有真正的标准;RFC 就其价值而言,只是试图记录实际的用户代理正在做什么。
无论如何,您可能想要阅读的 RFC 是RFC 7235,它指定代理应该发送带有 407 状态的 Proxy-Authenticate 标头来请求身份验证信息,并且接收此标头的用户代理应该使用Proxy-Authorization 标头包含代理的身份验证信息。
可以使用多种质询/响应方法来提供此信息;最广泛使用的是“基本”(RFC 7617),因为几乎所有使用 HTTP 的东西都实现了它。
IANA 维护着已知 HTTP 身份验证方案的注册表。作为一般规则,它们使用前面命名的 HTTP 标头,或者它们被认为是不合规的。没有一个使用 cookie 进行身份验证。
我不能说是否允许代理添加或更改 cookie。RFC 在这一点上似乎确实不是很清楚。这当然是意外的行为,尤其是对于身份验证而言。BlueCoat 长期以来一直在质量上表现平平……