Was passiert, wenn eine HTTP-Anfrage vorzeitig beendet wird?

13

Angenommen, ich gebe eine URL in meinen Browser ein und der Browser sendet die HTTP-Anfrage. Der entfernte HTTP-Server akzeptiert die Anforderung und initiiert eine lange Aufgabe, um die Anforderung zu bedienen.

Wie wird die Anfrage geschlossen, wenn ich sie vorzeitig beende (z. B. Esc oder in Firefox)? Wird der Browser diese Abbruchanforderung an den Server weiterleiten (glaube ich nicht)?

Angenommen, nein, was wird der Server nach Abschluss der langen Aufgabe mit dem Ergebnis tun? Schickt es es trotzdem zurück? Wenn ja, was passiert dann? Geht es bis zu meinem PC? Oder verirrt sich unterwegs?

Dies ist nur für meine Neugier.

Vielen Dank für Ihre Zeit :)

Gowtham
quelle
2
Haben Sie versucht, ein Wireshark-Capture durchzuführen? So können Sie ganz einfach sehen, was ein Computer über das Netzwerk an einen anderen Computer sendet.
Radrennfahrer

Antworten:

8

Nun, es hängt alles davon ab, was der Server tut. Normalerweise wird die abgebrochene Anforderung erst "erkannt", wenn ein Sendeversuch unternommen wird. Zu diesem Zeitpunkt erhält das Skript eine user_abort-Nachricht vom Webserver (in PHP können Sie angeben, dass der Benutzerabbruch mit ignoriert werden soll ignore_user_abort(true);). Ohne den Versuch, Daten an den Client zu senden, kann der Server nicht wissen, dass die Anforderung abgebrochen wurde.

Wenn versucht wird, die Anforderung an die geschlossene TCP-Verbindung zu senden, hängt das, was geschieht, vollständig von der Serversoftware ab. Apache funktioniert folgendermaßen: Wenn sich die gesendeten Daten noch während der Verarbeitung eines dynamischen Skripts befinden, wird das Skript über den Abbruch informiert und behandelt, wie es möchte (PHP wird standardmäßig beendet). Wenn das Skript fertig ist oder es sich um eine statische Dateianforderung handelt, wird die geschlossene Verbindung einfach ignoriert und zurückgegeben.

ircmaxell
quelle
-2

Ich denke, man muss an Elektrizität denken. aufladen. Wenn eine Verbindung getrennt wird, sind die gesendeten Daten kostenpflichtig und verschwinden einfach, da für diese bestimmte Übertragung kein Abhörsockel verfügbar ist. Nur wenn eine Steckdose vorhanden ist, findet eine Kommunikation statt.

Beispiel:

Wir haben http://localhostfür Apache2 httpd getroffen. Angenommen, es läuft nicht. Der Browser öffnet einen Socket, sendet eine Nachricht an Port 80 (Standardeinstellung) und prüft, ob eine Antwort vorliegt. Da es keinen Listener gibt, da Apache nicht ausgeführt wird, erhält diese Ping-Anforderung überhaupt keine Antwort. mindestens 200 ok oder jede Art von Handshake überhaupt. Was passiert dann mit unserem Ping? http sendet etwas: wie GET http://localhost 80... etc. was passiert mit dieser Zeile? GET http://localhost 80? es ist nur eine Ladung und verschwindet.

Dies ist nur meine Überzeugung, und wir sollten uns der Klarheit halber zunächst auf TCP beziehen . Nur dann können wir verstehen, wie sich das Internetprotokoll und das nachfolgende http verhalten. Letztendlich scheint es keine konkrete Definition für eine vorzeitig abgebrochene http-Anfrage zu geben. Deshalb spricht man von vorzeitiger Kündigung.

Siva Tumma
quelle
1
Vielleicht ist dies zwar poetisch, aber ungenau und kein besonders nützlicher Weg, um die Auswirkungen davon zu betrachten.
Falcon Momot