Можно ли получить полные заголовки или размер заголовков?

Возможно ли, чтобы сервлет Java извлекал полный текст заголовка запроса из заголовка ответа, а не выполнял метод getHeader() по отдельности? В качестве альтернативы можно ли получить полный размер этих заголовков в байтах?

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

Заранее спасибо.


person George    schedule 02.03.2011    source источник


Ответы (2)


API не предоставляет способа получить все заголовки одним вызовом — проверьте Javadocs:

http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html

Вот пример того, как можно получить все заголовки (без утомительных проверок на null).

private MultiValueMap getAllHeaders(HttpServletRequest request) {
    MultiValueMap allHeaders = new MultiValueMap();
    List<String> headerNames = Collections.list((Enumeration<String>)request.getHeaderNames());
    for (String headerName : headerNames) {
        allHeaders.putAll(headerName, Collections.list((Enumeration<String>) request.getHeaders(headerName)));
    }

    return allHeaders;
}

После того, как вы используете модели сервлетов Java, вы не можете получить размер заголовка в байтах без его повторного построения (т.е. перебрать getAllHeaders и добавить <header name>: <header value>), вам также потребуется добавить шаблонную пластину GET HTTP 1/1.1 и т. д. Определенно выполнимо, если вам абсолютно необходимо Java-решение, но я чувствую, что вам следует подумать о том, чтобы вытолкнуть эту логику из вашего Java-приложения в прокси.

person Ben George    schedule 02.03.2011

Я не думаю, что вы можете это сделать. Или, по крайней мере, не без взлома реализации контейнера сервлетов.

Возможно, вам следует установить прокси-сервер между HTTP-клиентом и сервером и провести измерение там.

В качестве альтернативы получите приближение, интегрировав размеры заголовков/полей в запросы и ответы. Я бы подумал, что это поможет вам с точностью до пары процентов ... что, по мнению большинства людей, достаточно хорошо.

person Stephen C    schedule 02.03.2011