
Ich habe einen Webserver, der einige statische Dateien bereitstellt. Wenn der Server stark ausgelastet ist, sendet er Teilantworten mit einem HTTP-Status 200.
Das ist ein Problem für meine App. Warum?
- Ich habe Cache-Header auf die Antwort gesetzt, die dafür gedacht sind, die Datei für lange Zeit zu behalten, da diese Dateien statisch sind und sich nie ä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 beschädigt meine App!
Ich habe 2 verschiedene Webserver (Jetty und Apache) ausprobiert und sehe, dass das Problem bei beiden auftritt, mit oder ohne vorgeschalteten Load Balancer (haproxy). Das lässt mich glauben, dass es nicht am Webserver selbst liegt, aber vielleicht ist dies das erwartete Verhalten für jeden Webserver unter hoher Belastung?
Wie kann ich die Ursache dieses Problems herausfinden oder mich davor schützen?
BEARBEITEN: Für diese Anfragen Content-Length
wird auch ein Antwortheader bereitgestellt.
Antwort1
Sie benötigen eine Paketerfassung des aufgetretenen Problems. Es könnte sein, dass alles bei Ihnen einwandfrei funktioniert, die Endbenutzer jedoch fehlerhafte Browser haben oder sich hinter fehlerhaften Web-Proxys, Firewalls oder NAT-Gateways befinden, die die Datei abschneiden.
Sie sollten sich ansehen, wie Ihre Server / Reverse-Proxys / Load Balancer die Header Content-Length und Transfer-Encoding beim Bereitstellen dieser JS-Datei verarbeiten. Überprüfen Sie auch die Regeln für diese Dinge inRFC 7230 Abschnitt 3.3.2, „Inhaltslänge“und einige der folgenden Abschnitte.