Sönke Tesch: HTTP-Request abbrechen

Beitrag lesen

Ist es prinzipiell möglich eine ausgelöste Web-Anforderung vor Erhalt der Antwort zu stornieren?

Ja.

Also, der User löst durch einen Klick (o.ä.) in seinem Browser einen HTTP-Request auf dem Server aus,
der startet daraufhin einen evtl. aufwendigen CGI-Prozess.
Jetzt klickt der User irgendwo anders hin, braucht das Ergebnis also gar nicht.
Könnte man mittels Javascript den alten Request canceln und damit den Server entlasten?

Viel zu aufwendig. Eine TCP-Verbindung lässt sich ohne weiteres mittendrin abbrechen und der Eigentümer (hier: der Webserver) der Verbindung wird darüber automatisch informiert.
Du musst nur dafür sorgen, daß Dein Skript auf dieses Ereignis reagiert. PHP bricht beispielsweise (zumindest in der Modulversion) ein Skript standardmäßig ab, sobald es versucht, in eine bereits geschlossene Verbindung zu schreiben (lässt sich aber ändern, http://www.php.net/manual/de/features.connection-handling.php). mod_fastcgi macht's ähnlich und signalisiert dem Prozess das Verbindungsende (http://www.fastcgi.com/docs/faq.html#Signals).

Unter Umständen etwas hinderlich könnten allerdings Caches sein, die dafür sorgen, daß die Anfrage komplett ausgeführt wird, egal ob der Browser die Verbindung beendet hat oder nicht.
Das hat aber durchaus seinen Sinn und Zweck und mit passender Nutzung von Expires oder Last-Modified bzw. If-Modified-Since kann man dank der Cache-Zwischenspeicherung eventuell auch die ein oder andere Abfrage zumindest mit der Meldung "Keine Änderung seit letztem Abruf" frühzeitig beenden oder sogar ganz verhindern.

Gruß,
  soenk.e