2016-04-19 9 views
2

Dieses Problem scheint vor ein paar Tagen ohne Codeänderungen gestartet zu haben, mein lokaler Tomcat-Server würde einfach nicht mehr reagieren.Doppelte Header in der Antwort/Browser, die zeitweise fehlschlagen

Meine Hauptfilterhaltepunkte werden nicht getroffen, und nur einige Ressourcen werden geladen.

Diejenigen, die scheitern, scheint doppelte Antwort-Header zu haben:

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 

und Chrom mit einem Fehler beendet: Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING, was Sinn macht.

Der Tomcat-Connector wurde nicht geändert und enthält eine gzip-Antwort. was habe ich versucht:

  • Thread-Dump - keinen offensichtlichen Sperrcode
  • wireshark - tun Sie es nicht genug wissen, was gut, was
  • schief geht, um herauszufinden, deaktiviert Antivirus
  • keine Proxies laufen

Die Seite scheint nur für immer zu laden. Hier ist der Kicker, es passiert zufällig, es würde anfangen, eine Stunde zu arbeiten, aber nicht die nächste.

Das einzige, was ich kann thinl ist, dass einige Domain-Sache geändert haben, keine Windows-Updates ausgeführt haben, und 3 oder 4 anderen PC das gleiche tun, während zwei andere nicht (gleiche Build)

I keine Ahnung, wo ich als nächstes hinschauen soll? Irgendwelche Ideen?

Antwort

2

Ok Leute, beantworte meine eigene Frage hier, aber ich habe die Lösung gefunden.

Ich verwendete eine benutzerdefinierte file servlet geschrieben von @BalusC; und das Problem war darin

Hier sind meine Ergebnisse:

  • Das Problem erscheint, wenn eine Kombination aus Content-Encoding: gzip mit und Content-Range
  • Der resultierende Fehler ist: ERR_INCOMPLETE_CHUNKED_ENCODING
  • ich zum ersten Mal diesen Filter deaktivieren entschieden und lassen Sie Tomcat DefaultServlet damit umgehen ... Problem
  • als Programmierer, musste ich wissen, warum.
  • Ich habe noch nicht den genau Grund, aber ich denke, es liegt daran, dass gzip nicht genau mit einer Länge

Die Spezifikation für Content-Range auch den besagt, dargestellt werden:

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.

Und innerhalb des Codes wurde es gesendet, selbst wenn es die volle Antwort war:

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) { 
     // ..... 

Ich entfernte diese Linie, und alles fing wieder an zu arbeiten! Ich möchte wirklich, dass jemand darauf eingeht und möglicherweise eine bessere Erklärung gibt.Hier

ist die chrome://net-internals/ Ausgabe einer Datei, die fehlgeschlagen:

 
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) 

Und schließlich sind hier einige Links, die mir wirklich geholfen, scheint Frühjahr das gleiche Problem hatte im vergangenen Jahr.

Ich kann immer noch nicht herausfinden, warum dies jahrelang nach dem Laufen feinen zufällig gestartet und würden schätzen wirklich jede Eingabe.

+0

Nizza finden. Ich vermute einen Chrome-Bug. Tritt dies auch bei anderen Browsern oder älteren Chrome-Versionen auf? Nichtsdestoweniger gehört 'Content-Range' in der Tat nicht dort, wenn es den vollen Bereich darstellt, aber es sollte harmlos sein, da es die' Content-Length' ist, die für die Inhaltslänge führt. Übrigens, das alte FileServlet wurde auf http://showcase.omnifaces.org/servlets/FileServlet überarbeitet, von dem die Gzip-Antwort abgezogen und auf http://showcase.omnifaces.org/filters/GzipResponseFilter aufgeteilt wurde. Funktioniert sie? gut in deinem Fall? – BalusC

+0

@BalusC, vielen Dank für Ihre Eingabe! Es ist in Firefox und Chrome passiert, was mich verwirrt hat. Ich habe bereits das neu überarbeitete 'FileServlet' gesehen, sieht toll aus, ich werde mir etwas Zeit nehmen, um sie zu implementieren und zu sehen, ob das Problem immer noch auftritt, wenn sie in Verbindung miteinander verwendet werden :) – epoch

+0

Okay, nur um auf der sicheren Seite zu sein Ich habe den unnötigen 'Content-Range' aus dem Blog und OmniFaces entfernt. Der 'GzipResponseFilter' überspringt übrigens bereits Antworten mit' Content-Range'-Header von gzipping. Das alte 'FileServlet' sollte das gleiche getan haben. – BalusC

Verwandte Themen