summaryrefslogtreecommitdiff
path: root/methods/http.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2012-01-30 16:26:10 +0100
committerDavid Kalnischkies <kalnischkies@gmail.com>2012-01-30 16:26:10 +0100
commit6f4501f96f9ea256ff580129ba3835e0d56c398a (patch)
tree115e5c1eeeb8a8843869c7345a8555e8e0c6df26 /methods/http.cc
parent017f9fd68258b15ac4df5ae73b19ba6653711022 (diff)
* methods/http{s,}.cc:
- if a file without an extension is requested send an 'Accept: text/*' header to avoid that the server chooses unsupported compressed files in a content-negotation attempt (Closes: #657560)
Diffstat (limited to 'methods/http.cc')
-rw-r--r--methods/http.cc14
1 files changed, 13 insertions, 1 deletions
diff --git a/methods/http.cc b/methods/http.cc
index b8ed43cd2..2721b1224 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -716,7 +716,19 @@ void HttpMethod::SendReq(FetchItem *Itm,CircleBuf &Out)
}
}
-
+ // If we ask for uncompressed files servers might respond with content-
+ // negotation which lets us end up with compressed files we do not support,
+ // see 657029, 657560 and co, so if we have no extension on the request
+ // ask for text only. As a sidenote: If there is nothing to negotate servers
+ // seem to be nice and ignore it.
+ if (_config->FindB("Acquire::http::SendAccept", true) == true)
+ {
+ size_t const filepos = Itm->Uri.find_last_of('/');
+ string const file = Itm->Uri.substr(filepos + 1);
+ if (flExtension(file) == file)
+ strcat(Buf,"Accept: text/*\r\n");
+ }
+
string Req = Buf;
// Check for a partial file