这阻止了Git的正常操作,即使设置了适当的http.proxy和http.sslCAInfo属性以确保SSL连接本身有效.
使用环境变量GIT_CURL_VERBOSE = 1,我们发现当使用git clone时,会发生HTTP 407(需要代理身份验证). Git正确地完成了此身份验证,最后,设备返回带有Cookie标头Set-Cookie的HTTP 200.
然后Git将连接到目标服务器,但没有cookie,导致HTTP 401.
解决方案是设置git配置选项http.saveCookies = true
题:
RFC标准实际上允许中间代理添加cookie吗?
Anthony Rich asked the same question to the http-state mailing list但没有任何回应.他确实注意到了
RFC 2965 HTTP State Management Mechanism,3.5 Caching Proxy Role it says:
Proxies MUST NOT introduce Set-Cookie2 (Cookie) headers of their own
in proxy responses (requests).
然而,superseding RFC 6265根本没有提到这一点.
解决方法
在任何情况下,您可能想要读取的RFC是RFC 7235,它指定代理应该发送带有401错误的Proxy-Authenticate头来请求身份验证信息,并且接收此代理的用户代理应该使用代理重试请求 – 包含代理的身份验证信息的授权头.
可以使用一些挑战/响应方法来提供这些信息;最常用的是“基本”(RFC 7617),因为几乎所有说HTTP的东西都实现了它.
IANA维护registry of known HTTP authentication schemes.作为一般规则,他们使用之前命名的HTTP标头,或者注意到它们不合规.没有使用cookie进行身份验证.
是否允许代理添加或更改cookie,我不能说.在这一点上,RFC似乎并不十分清楚.这肯定是出乎意料的行为,特别是对于身份验证. BlueCoat在质量方面有着悠久的历史……