代理身份validation期间允许中间代理添加Cookie吗?

我最近遇到了一个特定的安全设备(BlueCoat),它要求所有到Internet的连接都必须通过它来代理(你好,中间人),并相应地使用特殊的SSL证书来拦截所有的stream量。

这阻止了Git的正常操作,即使设置了适当的http.proxyhttp.sslCAInfo属性来确保SSL连接本身正常工作。

使用环境variablesGIT_CURL_VERBOSE=1 ,我们发现使用git clone ,会发生HTTP 407(需要代理身份validation)。 Git正确地完成了这个authentication,最后,设备返回一个带有Cookie头部Set-Cookie的HTTP 200。

然后Git将连接到目标服务器,但没有 cookie,导致HTTP 401。

解决方法是设置gitconfiguration选项http.saveCookies=true

问题: RFC标准是否允许中间代理添加Cookie?

Anthony Rich 向http-state邮件列表提出了同样的问题,但没有任何回应。 他确实注意到了

RFC 2965 HTTP状态pipe理机制,3.5高速caching代理angular色它说:代理不能在代理响应(请求)中引入自己的Set-Cookie2(Cookie)头。

然而, 取代的RFC 6265完全没有提到这一点。

HTTPcookies是一个混乱。 没有真正的标准; RFC的价值仅仅是试图logging实际的用户代理正在做什么。

在任何情况下,你可能想读的RFC是RFC 7235 ,它指定代理应该发送一个带有401错误的代理 – authentication头来请求authentication信息,并且接收到这个代理的用户代理应该重试请求包含代理的身份validation信息的代理授权标头。

可以使用一些质疑/响应方法来提供这些信息; 最广泛使用的是“基本”( RFC 7617 ),几乎所有说HTTP的实现它。

IANA维护已知的HTTPauthenticationscheme的registry 。 作为一般规则,他们使用先前命名的HTTP标头,或将其标记为不合规。 没有使用cookies进行身份validation。

无论是否允许代理添加或更改Cookie,我都不能说。 RFC在这一点上似乎并不十分清楚。 这肯定是出乎意料的行为,尤其是对于身份验 BlueCoat在质量上有着悠久的历史