http-сервер не поддерживает Accept-Encoding: gzip, если User-Agent не является известным браузером - PullRequest
1 голос
/ 21 августа 2011

При отправке 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 получен правильно

1 Ответ

2 голосов
/ 21 августа 2011

Это почти наверняка происходит из-за того, что некоторые устаревшие агенты пользователей объявляют о поддержке GZIP, а затем не могут правильно распаковать содержимое.По этой причине известно, что некоторые серверные инфраструктуры отправляют сжатые ответы только тем клиентам, у которых нет таких ошибок.

...