Повторяющиеся заголовки в ответе / браузеры периодически сбоят

Эта проблема, похоже, началась несколько дней назад без каких-либо изменений кода, мой локальный сервер Tomcat просто перестал бы отвечать.

Точки останова моего основного фильтра не попадают, а загружаются только некоторые ресурсы.

Те, которые терпят неудачу, похоже, имеют повторяющиеся заголовки ответа:

Accept-Ranges:bytes
Accept-Ranges:bytes
Content-Disposition:inline;filename="online-framework.js"
Content-Disposition:inline;filename="online-framework.js"
Content-Encoding:gzip
Content-Encoding:gzip
Content-Range:bytes 0-42062/42063
Content-Range:bytes 0-42062/42063
Content-Type:application/javascript
Content-Type:application/javascript
Date:Tue, 19 Apr 2016 13:01:18 GMT
ETag:online-framework.js_42063_1461060446000
ETag:online-framework.js_42063_1461060446000
Expires:Tue, 26 Apr 2016 13:01:19 GMT
Expires:Tue, 26 Apr 2016 13:01:19 GMT
Last-Modified:Tue, 19 Apr 2016 10:07:26 GMT
Last-Modified:Tue, 19 Apr 2016 10:07:26 GMT
Server:Apache-Coyote/1.1
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
Transfer-Encoding:chunked
Vary:Accept-Encoding
Vary:Accept-Encoding

И хром останавливается с ошибкой: Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING, что имеет смысл.

Разъем tomcat не был изменен и содержит ответ gzip. что я пробовал:

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

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

Единственное, что я могу вспомнить, это то, что некоторые доменные вещи могли измениться, обновления Windows не запускались, и 3 или 4 других компьютера делают то же самое, а 2 других - нет (такая же сборка)

Понятия не имею, где искать дальше? Есть идеи?

1 ответ

Решение

Хорошо, ребята, отвечая на мой вопрос здесь, но я нашел решение.

Я использовал пользовательский файловый сервлет, написанный BalusC; и проблема была в этом

Вот мои выводы:

  • Эта проблема появляется при использовании комбинации Content-Encoding: gzip а также Content-Range
  • В результате возникает ошибка: ERR_INCOMPLETE_CHUNKED_ENCODING
  • Сначала я решил отключить этот фильтр и позволить Tomcat's DefaultServlet справиться... проблема ушла
  • Будучи программистом, я должен был знать почему.
  • У меня до сих пор нет точной причины, но я думаю, что это потому, что gzip не может быть точно представлен с длиной

Спецификация для Content-Range также говорится, что:

Заголовок объекта Content-Range отправляется с частичным телом объекта, чтобы указать, где в полном теле объекта следует применять частичное тело. Единицы измерения диапазона определены в разделе 3.12.

А внутри кода оно было отправлено, даже если это был полный ответ:

if (ranges.isEmpty() || ranges.get(0) == full) {
    // Return full file.
    Range r = full;
    response.setContentType(contentType);
    response.setHeader("Content-Range", "bytes " + r.start + "-" + r.end + "/" + r.total);

    if (content) {
        // .....

Я удалил эту строку, и все снова заработало! Я бы очень хотел, чтобы кто-то смирился с этим и, возможно, дал лучшее объяснение.

Здесь chrome://net-internals/ вывод файла, который не удался:

t = 3740 [st = 38] -HTTP_STREAM_REQUEST
t = 3740 [st = 38] + HTTP_TRANSACTION_SEND_REQUEST [dt = 0]
t = 3740 [st = 38] HTTP_TRANSACTION_SEND_REQUEST_HEADERS
                          -> GET /Core/resources/scripts/scriptaculous/dragdrop.js?t=1461139610 HTTP/1.1
                              Хост: localhost: 8080
                              Подключение: keep-alive
                              Прагма: без кеша
                              Cache-Control: без кеша
                              Принять: */*
                              Пользователь-агент: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/49.0.2623.112 Safari/537.36
                              DNT: 1
                              Ссылка: http://localhost:8080/Core/Dashboard? ComponentID=VCmq3c
                              Accept-Encoding: gzip, deflate, sdch
                              Accept-Language: en-US,en;q=0,8,af;q=0,6
                              Cookie: [306 байт было удалено]
t= 3740 [st=   38]     -HTTP_TRANSACTION_SEND_REQUEST
t= 3740 [st=   38]     +HTTP_TRANSACTION_READ_HEADERS  [dt=4]
t= 3740 [st=   38]        HTTP_STREAM_PARSER_READ_HEADERS  [dt=4]
t= 3744 [st=   42]        HTTP_TRANSACTION_READ_RESPONSE_HEADERS
                          -> HTTP/1.1 200 OK
                              Сервер: Apache-Coyote/1.1
                              Расположение содержимого: встроенное;filename="dragdrop.js"
                              Accept-Ranges: байты
                              ETag: dragdrop.js_19250_1461136271305
                              Дата последнего изменения: ср, 20 апр 2016 07:11:11 GMT
                              Истекает: Ср, 27 апреля 2016 08:06:51 GMT
                              Диапазон содержимого: байты 0-19249/19250
                              Тип контента: приложение /javascript
                              Передача-кодировка: чанки
                              Варьируется: Accept-Encoding
                              Дата: среда, 20 апреля 2016 08:06:50 GMT
t= 3744 [st=   42]     -HTTP_TRANSACTION_READ_HEADERS
t= 3744 [st=   42]      HTTP_CACHE_WRITE_INFO  [dt=56]
t= 3800 [st=   98]      HTTP_CACHE_WRITE_DATA  [dt=0]
t= 3800 [st=   98]      HTTP_CACHE_WRITE_INFO  [dt=1]
t= 3801 [st=   99]      URL_REQUEST_DELEGATE  [dt=0]
t= 3801 [st=   99]   -URL_REQUEST_START_JOB
t= 3801 [st=   99]    URL_REQUEST_DELEGATE  [dt=0]
t= 3801 [st=   99]    HTTP_TRANSACTION_READ_BODY  [dt=0]
t= 3801 [st=   99]    HTTP_CACHE_WRITE_DATA  [dt=1]
t= 3802 [st=  100]    URL_REQUEST_JOB_BYTES_READ
                      -> byte_count = 3683
t= 3802 [st=  100]    HTTP_TRANSACTION_READ_BODY  [dt=0]
t= 3802 [st=  100]    HTTP_CACHE_WRITE_DATA  [dt=0]
t= 3802 [st=  100]    URL_REQUEST_JOB_BYTES_READ
                      -> byte_count = 13982
t= 3802 [st=  100]    HTTP_TRANSACTION_READ_BODY  [dt=20365]
                      -> net_error = -355 (ERR_INCOMPLETE_CHUNKED_ENCODING)
t=24167 [st=20465]    FAILED
                      -> net_error = -355 (ERR_INCOMPLETE_CHUNKED_ENCODING)
t=24168 [st=20466] -REQUEST_ALIVE
                    -> net_error = -355 (ERR_INCOMPLETE_CHUNKED_ENCODING)

И, наконец, вот несколько ссылок, которые действительно помогли мне, кажется, у весны была та же проблема в прошлом году.

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

Другие вопросы по тегам