Как удалить тело запроса после проверки заголовков в сервлете - PullRequest
2 голосов
/ 25 декабря 2010

Я хочу проверить заголовок запроса, содержит ли он определенный заголовок или нет, прежде чем продолжить с телом.Например, я хочу проверить, содержит ли multipart / form-data "Authorization" в заголовке или нет.Если это не так, нет необходимости продолжать загрузку составного тела, которое обычно достаточно велико для загрузки файла.

Позволяет ли это делать сервлет?Я попытался найти в Google случайно, но не повезло.Вот код, который я пробую в своем сервлете, но он все еще продолжается с получением тела до вызова этого doPost метода.Кажется, что поток полностью принят до того, как сервлет вызван.

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    response.setContentType("text/plain");
    if (request.getHeader("Authorization") == null) {
        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
        out.println("Status: " + HttpServletResponse.SC_UNAUTHORIZED + " - UNAUTHORIZED");
        return;
    }
    // ... the rests
}

Ответы [ 2 ]

3 голосов
/ 25 декабря 2010

Это ограничение HTTP. Вы не можете отправить ответ, если запрос не был полностью прочитан до конца.

1 голос
/ 09 июня 2016

RFC 2616 гласит:

Клиент HTTP / 1.1 (или более поздней версии), отправляющий тело сообщения, ДОЛЖЕН контролировать состояние сетевого подключения, пока он передает запрос. Если клиент видит состояние ошибки, он ДОЛЖЕН немедленно прекратить передачу тела.

Так что я не согласен, это не ограничение HTTP, а ограничение сервлета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...