Ist HTTP synchron oder asynchron (Ohne Ajax oder JavaScript)?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Ich versuche mal zu erraten, was du evtl. meinen könntest. :)

Bei HTTP wird eine Verbindung vom Client zum Server aufgebaut, dieser Antwortet, und die Verbindung wird danach beendet, oder die nächste Anfrage gesendet. Das könnte man als Synchron bezeichnen.

(Wobei die allermeisten Server natürlich mehrere Verbindungen gleichzeitig verarbeiten können, was dann serverseitig als "asynchron" zu bezeichnen wäre. HTTP-Server, die nicht in der Lage sind, mehrere Verbindungen gleichzeitig abzuhandeln, sind selten und eigentlich meistens nur kleine selbstgestrickte Skripte, die "mal schnell" eine Aufgabe erledigen sollen.)

Clients (vor allem Webbrowser) können - wie bei den Servern - allermeistens mehrere gleichzeitige Verbindungen zu ein und demselben oder unterschiedlichen Servern aufbauen, und dann z.B. von Server A eine Webseite runterladen, während von Server B eine PDF Datei bezogen wird.

(Auch hierbei gilt, dass einige Clients, allem voran simple Spider / Crawler / Bots, oft nicht in der Lage sind, mehrere Verbindungen gleichzeitig zu Servern aufzubauen.)

Allgemein kann man aber sagen, dass vernünftig entwickelte HTTP-Client- und -Server Software für den produktiveinsatz, mit mehreren paralleln Verbindungen umgehen kann. Software, die das nicht kann, sind meistens nur kleine Testskripte, die man schreibt, um mal kurz etwas ausprobieren zu wollen.

Also man könnte sagen, dass die meiste HTTP-Software (Webserver, Browser, Google-Bot, News-Feed-Reader, Download-Manager, ...) schon asynchron läuft.

Darüber hinaus gibt es noch eine Technik, die sich HTTP-Pipelining nennt. Dabei wartet der Client nach einer Anfrage nicht auf die Antwort des Servers, um die nächste Anfrage zu senden, sondern schickt sofort die nächste Anfrage ab, und behandelt die Antworten dann eben einfach zu dem Zeitpunkt, zu dem sie eintreffen. Diese Technik unterstützen alle gängigen Browser und Webserver, aber sie ist leider standardmäßig deaktiviert, da viele Webserver eine grottige Software einsetzen, die zu dumm ist, um Pipelining zu "verstehen". (obwohl diese Funktionalität weniger als 5 Zeilen Code-Änderung bedeutet) Wer dennoch Pipelining ausprobieren will, und damit seine HTTP-Verbindungen drastisch beschleunigen will, kann das ganze in den internen Browsereinstellungen aktivieren. Dort sollte man als Laie aber nicht unbedacht rumpfuschen! Und einige (sehr wenige) Webseiten werden mit aktiviertem HTTP-Pipelining nicht mehr funktionieren ... muss also jeder selbst abwägen, was günstiger ist.

Als letzten Punkt gibt es noch die Katastrophe, die sich HTTP 2.0 nennt, und ein völlig undurchdachter haufen Spezifikationsmüll ist, der an das OOXML Debakel von Microsoft erinnert. Dabei ist eine Art HTTP-Pipelining ebenfalls standardisiert.

Also man könnte sagen, dass HTTP an sich zwar synchron arbeitet, aber mit Pipelining auf asynchron geupgradet werden kann. Die Server- und Client-Software hingegen ist (fast) immer asynchron, was aber mit dem eigentlichen HTTP-Protokoll überhaupt nichts zu tun hat.

Zusammenfassung:

HTTP-Protokoll: bis HTTP/1.1 meistens synchron, ab HTTP/2.0 standardmäßig asynchron

HTTP-Software: asynchron, mit Ausnahme gaaanz weniger Einzelfälle

Zum Schluss noch ein Link, der Pipelinging etwas anschaulicher mit Bildern darstellt ...

https://de.wikipedia.org/wiki/HTTP-Pipelining

Viel Spaß damit, und einen schönen Tag noch! :)


keksever 
Beitragsersteller
 18.06.2015, 10:03

Danke erst einmal für deine umfassende Antwort! Ich hatte mir schon gedacht, dass das eigentliche HTTP Protokoll ja synchron agieren muss, da es "Request-Response" ist. Noch einmal danke für die tolle Zusammenfassung!

1

http ist stateless ,

javascript request gibt es sowohl als S(yncron)JAX auch als A(syncron)JAX

http ist ein protokoll. Was meinst du mit sycron oder asyncron? Und was haben die scriptsprachen damit zutuhn?