Повторяющиеся заголовки в ответе / браузеры периодически сбоят
Эта проблема, похоже, началась несколько дней назад без каких-либо изменений кода, мой локальный сервер 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)
И, наконец, вот несколько ссылок, которые действительно помогли мне, кажется, у весны была та же проблема в прошлом году.
Я до сих пор не могу понять, почему это началось случайно после нескольких лет работы, и я был бы очень признателен за любой вклад.