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

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

Angenommen, ich gebe eine URL in meinen Browser ein und der Browser sendet die HTTP-Anforderung. Der Remote-HTTP-Server akzeptiert die Anforderung und leitet eine lange Aufgabe ein, um die Anforderung zu verarbeiten.

Wenn ich die Anfrage beende, bevor sie abgeschlossen ist (z. B. durch Drücken von Esc oder in Firefox), wie wird die Anfrage dann geschlossen? Teilt der Browser diese Abbruchanfrage dem Server mit (ich glaube, das tut er nicht)?

Angenommen nein, was macht der Server nach Abschluss der langen Aufgabe mit dem Ergebnis? Sendet er es trotzdem zurück? Und wenn ja, was passiert dann? Kommt es bis zu meinem PC? Oder geht es unterwegs verloren?

Dies dient nur meiner Neugier.

Vielen Dank für Ihre Zeit :)

Antwort1

Nun, es hängt alles davon ab, was der Server tut. Normalerweise „erkennt“ er die abgebrochene Anfrage erst, wenn ein Sendeversuch unternommen wird. An diesem Punkt erhält das Skript eine user_abort-Nachricht vom Webserver (in PHP können Sie ihm mit sagen, dass es die Benutzerabbrüche ignorieren soll ignore_user_abort(true);). Ohne den Versuch, Daten an den Client zu senden, kann der Server nicht wissen, dass die Anfrage abgebrochen wurde.

Was passiert, wenn versucht wird, die Anfrage an die geschlossene TCP-Verbindung zu senden, hängt vollständig von der Serversoftware ab. Apache funktioniert folgendermaßen: Wenn die gesendeten Daten noch vorhanden sind, während ein dynamisches Skript verarbeitet wird, wird das Skript über den Abbruch informiert und kann nach eigenem Ermessen damit umgehen (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 der Vorgang wird fortgesetzt.

Antwort2

Ich denke, man kann es sich wie eine Art Elektrizitätssache vorstellen. Eine Gebühr. Wenn eine Verbindung beendet wird, entstehen für die gesendeten Daten Gebühren; sie verschwinden einfach, da für die bestimmte Übertragung kein Abhör-Socket verfügbar ist. Nur wenn ein Socket vorhanden ist, findet eine Kommunikation statt.

Beispiel:

Wir suchen http://localhostnach Apache2 httpd. Angenommen, es läuft nicht. Der Browser öffnet einen Socket, sendet eine Nachricht an Port 80 (Standard) und prüft, ob eine Antwort vorliegt. Da es keinen Listener gibt, da Apache nicht läuft, erhält diese Ping-Anforderung überhaupt keine Antwort. Mindestens 200 ok oder überhaupt irgendeine Art von Handshake. Was passiert dann mit unserem Ping? http sendet etwas: wie GET http://localhost 80… usw. Was passiert mit dieser Zeile? GET http://localhost 80? Es ist nur eine Gebühr und verschwindet.

Das ist nur meine Meinung, und wir sollten uns zunächst aufTCPfür mehr Klarheit. Nur dann können wir verstehen, wie sich das Internetprotokoll und das nachfolgende http verhalten. Letztlich scheint es keine konkrete Definition für eine vorzeitig beendete http-Anfrage zu geben. Deshalb wird es als vorzeitige Beendigung bezeichnet.

verwandte Informationen