2016-04-19 3 views
2

Эта проблема, похоже, началась несколько дней назад без каких-либо изменений кода, мой локальный сервер 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 - не знаю его достаточно хорошо, чтобы понять, что идет не так
  • отключил антивирус
  • нет прокси-серверов под управлением

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

Единственное, что я не могу thinl из что некоторая область, что может быть изменен, без окон обновлений бегут, и 3 или 4 других ПК делают то же самое, в то время как 2 другие не делают (то же билд)

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

ответ

2

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

Я использовал пользовательскую форму file servlet, написанную @BalusC; и проблема была в ней

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

  • Проблема появляется при использовании комбинации Content-Encoding: gzip и Content-Range
  • Полученная ошибка: ERR_INCOMPLETE_CHUNKED_ENCODING
  • я первым решил отключить этот фильтр и пусть tomcat DefaultServlet справится с этим ... проблема ушла
  • Будучи программистом, я должен был знать, почему.
  • Я до сих пор не имею точную причины, но я думаю, что это происходит потому, что GZIP не может быть точно представлен с длиной

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

The Content-Range entity-header is sent with a partial entity-body to specify where in the full entity-body the partial body should be applied. Range units are defined in section 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 
           Host: localhost:8080 
           Connection: keep-alive 
           Pragma: no-cache 
           Cache-Control: no-cache 
           Accept: */* 
           User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 
           DNT: 1 
           Referer: 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 bytes were stripped] 
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 
           Server: Apache-Coyote/1.1 
           Content-Disposition: inline;filename="dragdrop.js" 
           Accept-Ranges: bytes 
           ETag: dragdrop.js_19250_1461136271305 
           Last-Modified: Wed, 20 Apr 2016 07:11:11 GMT 
           Expires: Wed, 27 Apr 2016 08:06:51 GMT 
           Content-Range: bytes 0-19249/19250 
           Content-Type: application/javascript 
           Transfer-Encoding: chunked 
           Vary: Accept-Encoding 
           Date: Wed, 20 Apr 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) 

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

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

+0

Nice find. Я подозреваю, что ошибка Chrome. Это происходит и с другими браузерами или более старыми версиями Chrome? Тем не менее, «Content-Range» действительно не принадлежит там, когда он представляет полный диапазон, но он должен был быть безвредным, так как это «Content-Length», ведущее к длине содержимого. Кстати, старый FileServlet был переработан на http://showcase.omnifaces.org/servlets/FileServlet, из которого Gzip-ответ был удален и разбит на http://showcase.omnifaces.org/filters/GzipResponseFilter. Они работают хорошо в вашем случае? – BalusC

+0

@BalusC, большое спасибо за ваш вклад! Это случилось в Firefox и Chrome, которые меня смутили. Я уже видел новый переработанный «FileServlet», выглядит потрясающе, я собираюсь потратить некоторое время на их реализацию и посмотреть, не возникает ли проблема при использовании их в сочетании друг с другом :) – epoch

+0

Хорошо, просто чтобы быть на безопасной стороне Я удалил ненужный «Content-Range» в полный файл как из блога, так и из OmniFaces. «GzipResponseFilter», кстати, уже пропускает ответы с заголовком Content-Range из gzipping. Старый «FileServlet» должен был сделать то же самое. – BalusC

Смежные вопросы