Wie kann ich feststellen, was eine http-Antwort tatsächlich abbricht?

475
Brad Parks

Ich habe einen Webserver, der statische Dateien bereitstellt. In Zeiten, in denen der Server stark ausgelastet ist, sendet er Teilantworten mit einem HTTP-Status von 200 aus.

Dies ist ein Problem für meine App. Warum?

  • Ich habe Cache-Header für die Antwort festgelegt, die die Datei für eine lange Zeit beibehalten sollen, da diese Dateien statisch sind und sich niemals ändern sollten.
  • Hin und wieder erhalten einige Endbenutzer nur einen Teil einer Javascript-Datei mit einem HTTP-Status von 200.
  • Diese Datei wird vom Browser zwischengespeichert und bricht meine App!

Ich habe zwei verschiedene Webserver (Jetty und Apache) ausprobiert und sehe das Problem mit beiden, mit oder ohne Load Balancer vor ihnen (haproxy). Dies lässt mich denken, dass es nicht der Webserver selbst ist, obwohl dies für jeden Webserver unter starker Auslastung erwartet wird.

Wie kann ich herausfinden, was das Problem verursacht oder davor schützen?

BEARBEITEN: Für diese Anforderungen wird auch ein Content-LengthAntwortheader bereitgestellt.

0
Wie groß ist die js-Datei? Ist es immer bei der gleichen Größe abgeschnitten? Können Sie eine PCAP von dem Client erhalten, wenn dies passiert? HelpingHand vor 6 Jahren 0
Sie sind größer, etwa 4 MB unkomprimiert ... verschiedene Größen, auch wenn sie abgeschnitten sind Brad Parks vor 6 Jahren 0

1 Antwort auf die Frage

0
Spiff

Sie benötigen eine Paketerfassung des Problems. Es könnte sein, dass alle Ihre Sachen einwandfrei funktionieren, aber die Endbenutzer haben fehlerhafte Browser oder stehen hinter fehlerhaften Web-Proxies, Firewalls oder NAT-Gateways, die die Datei abschneiden.

Vielleicht möchten Sie sich ansehen, wie Ihre Server / Reverse-Proxies / Load-Balancer die Content-Length- und Transfer-Encoding-Header verarbeiten, wenn Sie diese JS-Datei bereitstellen. Lesen Sie auch die Regeln für diese Dinge in RFC 7230, Abschnitt 3.3.2, "Content-Length" und einige der folgenden Abschnitte.