httpHeaderHasConnDir(const HttpHeader * hdr, const char *directive)
{
String list;
- http_hdr_type ht;
int res;
/* what type of header do we have? */
+#if USE_HTTP_VIOLATIONS
if (hdr->has(HDR_PROXY_CONNECTION))
- ht = HDR_PROXY_CONNECTION;
- else if (hdr->has(HDR_CONNECTION))
- ht = HDR_CONNECTION;
+ list = hdr->getList(HDR_PROXY_CONNECTION);
+ else
+#endif
+ if (hdr->has(HDR_CONNECTION))
+ list = hdr->getList(HDR_CONNECTION);
else
return 0;
- list = hdr->getList(ht);
-
res = strListIsMember(&list, directive, ',');
list.clean();
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
- request_header_access Proxy-Connection allow all
request_header_access All deny all
although many of those are HTTP reply headers, and so should be
reply_header_access Retry-After allow all
reply_header_access Title allow all
reply_header_access Connection allow all
- reply_header_access Proxy-Connection allow all
reply_header_access All deny all
although the HTTP request headers won't be usefully controlled
hdr->delById(HDR_VIA);
hdr->putStr(HDR_VIA, strVia.termedBuf());
}
- /* Signal keep-alive if needed */
- hdr->putStr( (http->flags.accel || http->flags.intercepted)? HDR_CONNECTION : HDR_PROXY_CONNECTION,
- request->flags.proxy_keepalive ? "keep-alive" : "close");
+ /* Signal keep-alive or close explicitly */
+ hdr->putStr(HDR_CONNECTION, request->flags.proxy_keepalive ? "keep-alive" : "close");
#if ADD_X_REQUEST_URI
/*
/* maybe append Connection: keep-alive */
if (flags.keepalive) {
- if (flags.proxying) {
- hdr_out->putStr(HDR_PROXY_CONNECTION, "keep-alive");
- } else {
- hdr_out->putStr(HDR_CONNECTION, "keep-alive");
- }
+ hdr_out->putStr(HDR_CONNECTION, "keep-alive");
}
/* append Front-End-Https */
break;
- case HDR_PROXY_CONNECTION:
+ case HDR_PROXY_CONNECTION: // SHOULD ignore. But doing so breaks things.
+ break;
case HDR_X_FORWARDED_FOR:
case HDR_CACHE_CONTROL:
- /** \par Proxy-Connaction:, X-Forwarded-For:, Cache-Control:
+ /** \par X-Forwarded-For:, Cache-Control:
* handled specially by Squid, so leave off for now.
* append these after the loop if needed */
break;
strcat(msg, buf);
}
- /* HTTP/1.0 may need keep-alive */
- if (strcmp(version, "1.0") == 0) {
- if (keep_alive) {
- if (strchr(url, ':')) {
- snprintf(buf, BUFSIZ, "Proxy-Connection: keep-alive\r\n");
- strcat(msg, buf);
- } else
- strcat(msg, "Connection: keep-alive\r\n");
- }
- }
- /* HTTP/1.1 may need close */
+ /* HTTP/1.0 may need keep-alive explicitly */
+ if (strcmp(version, "1.0") == 0 && keep_alive)
+ strcat(msg, "Connection: keep-alive\r\n");
+
+ /* HTTP/1.1 may need close explicitly */
if (!keep_alive)
strcat(msg, "Connection: close\r\n");