При отправке HTTP-запроса я устанавливаю Accept-Encoding: gzip
. Тем не менее, я заметил, что сервер фактически не сжимает ответ, если User-Agent
не «хорошо известен». У меня есть следующий код Android, который демонстрирует проблему, он получает "http://www.google.com", используя мой удивительный пользовательский агент, и проверяет, сжат ли ответ:
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setUserAgent(params, "MyApp/1.0 (Awesome)");
DefaultHttpClient client = new DefaultHttpClient(params);
HttpGet request = new HttpGet("http://www.google.com");
request.setHeader("Accept-Encoding", "gzip");
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
Header header = entity.getContentEncoding();
boolean isCompressed = false;
if (header != null) {
HeaderElement[] codecs = header.getElements();
for (int i = 0; i < codecs.length; i++) {
if (codecs[i].getName().equalsIgnoreCase("gzip")) {
isCompressed = true;
break;
}
}
}
if (isCompressed)
Log.i(TAG, "IT IS COMPRESSED");
else
Log.i(TAG, "IT IS NOT COMPRESSED");
При запуске этого кода выводится сообщение "НЕ СЖАТО": (
Но если я установлю пользовательский агент на "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
, он выдаст «ОНА СЖАТА».
Я знаю, что сервер выбирает, сжимать его или нет, но почему он выбирает, основываясь на «User-Agent»? Есть ли какие-либо другие параметры заголовка, которые я должен посылать, чтобы уговорить сервер сжать, независимо от агента пользователя?
EDIT:
Я знаю, что на этом пути нет прокси / и т.д., который искажает заголовок Accept-Encoding, потому что когда я получаю http://1.cgi.browserscope.net/cgi-bin/resource.cgi?headers=1
, я вижу, что заголовок Accept-Encoding получен правильно