Hi,
# gibt aus in EINER Response
nein, eine Connection mit zwei Responses.
Programmiertechnisch ist es eine Response, die aus dem Socket gelesen wird. Aus HTTP-Sicht ist es ebenfalls eine Response.
nein, falsch. Hättest du gesagt ein Stream, dann hätte man noch nicken können. Aber aus HTTP-Sicht sind es definitiv ZWEI Responses, nämlich auf zwei unterschiedliche Requests.
Dein gewähltes Beispiel macht's sogar noch interessanter, weil es zwei Requests sind, die an unterschiedliche Server gehen, und der Proxy führt die Responses zusammen, bezieht das Keep-Alive also konkret auf die Strecke Client-Proxy.
Ein Socket ist wie eine PIPE. Gerne gehen wir das mal für einen Request durch, wir senden Keep-Alive und schalten auf Listen. Was stellen wir fest? Richtig, es dauert ne ganze Weile, bis die Response kommt.
Richtig, weil der Server eine endliche Zeit braucht, um den Request zu bearbeiten. Ganz zu schweigen von der Übermittlung, eventuell über mehrere Hops. So dauert es also gut und gerne mal ein paar Zehntelsekunden, bis die Antwort vom Server überhaupt eintreffen kann.
Was daran liegt, dass der Server ebenfalls gewartet hat, nämlich darauf, ob noch weitere Requests kommen.
Falsch. Sobald der erste Request da ist (erkennbar am doppelten Zeilenumbruch), fängt er sofort mit der Bearbeitung an. Trifft während dieser Zeit ein weiterer Request ein, landet der in der Warteschlange und wird ebenfalls bearbeitet, sobald der erste fertig ist.
Daher schickt ein Webserver die Response erst dann, wenn nach einer gewissen Zeit (einstellbar) keine weiteren Requests am Server ankommen.
Falsch. Ein solches Verhalten wäre Gift für die Performance. Kein Kommunikations-Fachmann wird absichtlich Totzeiten einbauen.
Und jetzt kommt das, was hier vielen nicht klar ist: Wenn ein Webserver eine Response gesendet hat, schließt er die Verbindung.
Ja, außer der zugehörige Request sagte "Connection: Keep-Alive".
Verbindung offenhalten heißt also aus der Sicht des Webservers: Nicht senden sondern warten.
Falsch. Es heißt, senden, dann die Verbindung bestehen lassen.
Und Senden heißt: Das Warten ist beendet, Response senden, Connection: Close.
Falsch.
Gerne schreibe ich das mal be Gelegenheit ewtas ausführlicher auf, ich hab das zwar nicht stuiert aber ih hab mich sehr ausführlich damit befasst und ein praktikables Perl Modul dazu entwickelt.
Blödsinn. Du kannst nicht ausgerechnet in einem Fach-Forum so einen Unfug erzählen und dann auch noch erwarten, dass alle anderen anerkennend nicken oder ehrfürchtig leise "Boah!" sagen. Das kannst du bei der Jahreshauptversammlung des Baumwollpflücker-Vereins erzählen, da glaubt dir vielleicht auch noch der eine oder andere.
Aber ich erklärs nicht nochmal jedem Einzelnen hier, bei soviel Ignoranz und arroganz die mir hier entgegenspringt. Echt der Hammer.
Tja ... das ist ja leider kein Einzelfall. Du bist notorisch dafür bekannt, ja fast berühmt, regelmäßig Räder neu zu erfinden, dabei Lösungen von hinten durch die Brust ins Knie zu finden, die zum Teil auch noch auf falschen Annahmen beruhen und vielleicht in einem sehr speziellen Ökosystem funktionieren, vielleicht auch nur, weil ein Denkfehler und eine Fehlerbehandlung "auf Verdacht" sich kompensieren.
So, das musste jetzt mal gesagt werden.
So long,
Martin