Hi Stefan Muenz,
Hm - also bei meinem lokalen Apache ist "KeepAlive" auf "On" gestellt, und nachdem ich da nie dran gedreht habe, ist das wohl auch die Default-Einstellung. Kommentar im Apache-Konfig-File:
KeepAlive: Whether or not to allow persistent connections (more than
one request per connection). Set to "Off" to deactivate.
welcher Browser ist so konfiguriert, daß er das unterstützt?
(Selbst bei Mozilla gilt das Feature als "experimentell - bei Problemen bitte abschalten". Lies mal Preferences / Advanced / Networking.)
Welcher Proxy unterstützt das?
Welche Firewall unterstützt das?
Wahrscheinlich keine - denn man könnte eine DOS-Attacke auf sie fahren, wenn man ganz viele persistente Verbindungen aufmacht.
Dasselbe gilt natürlich auch für den Apache-Server ... deshalb gibt es ja diese vielen Schräubchen, mit denen man das KeepAlive feintunen sollte.
Wir haben mit KeepAlive diverse Experimente gemacht - spätestens an der Firewall war es vorbei mit der Herrlichkeit. Das Konzept ist schön - aber in der Realität nützt es derzeit noch wenig.
KeepAlive ist eine dem HTTP nachträglich aufgepfropfte Idee, welche aus der Erkenntnis geboren zu sein scheint, daß eine "real existierende" HTML-Seite üblicherweise weitere HTTP-Ressourcen referenzieren wird (Bilder, JavaScript-Seiten, CSS-Definitionen etc.). Eine Analyse der Paket-Verteilung eines durchschnittlichen Webservers wird mit hoher Wahrscheinlichkeit zu dem Ergebnis kommen, daß der Client Verbindungen in "Sprays" aufbaut - "eine Handvoll" pro Mausklick.
Genau darauf sind die Apache-Einstellungen (Anzahl Requests bzw. Timeout-Zeit) ausgelegt: Die Verbindung soll lange genug leben, damit alles, was aus Sicht des Anwenders (der ja HTTP nicht versteht) seine "Seite" komplett übertragen werden kann - eben das HTML-Dokument plus die darin referenzierten Dateien. Während dieser Phase sollen möglichst nicht mehrere TCP/IP-Verbindungen aufgebaut werden müssen.
Insofern kann (und sollte) man diese Werte dem "Charakter" der eigenen HTML-Seiten entsprechend einstellen, wenn man über die entsprechenden Informationen verfügt. (Was natürlich schwierig ist, weil die Anzahl der Dateien pro Seite zweifellos von Dokument zu Dokument streut.)
KeepAlive ist _kein_ Konzept für _stehende_ Verbindungen via HTTP. Und ob es innerhalb von HTTP überhaupt das leistet, was es leisten will, ist wegen der vielen TCP/IP-Knoten zwischendrin, die alle mitspielen müßten, sehr die Frage.
Dasselbe Ziel ließe sich mit einer Erweiterung von HTTP erreichen, wenn ein HTTP-Request eine _Liste_ von URLs anfordern könnte (alle mit demselben Satz von HTTP-Headern und ggf. derselben HTTP-Methode - mehr als ein "PUT" auf einmal wird nicht gut möglich sein), welche dann
1. vom Server berechnet und gesammelt,
2. in einer wie auch immer gearteten Archiv-Struktur verpackt und
2. als gemeinsame Archiv-Ressource (natürlich komprimiert) über das Netz übertragen würden.
Dann hätten wir nur einen Request, eine Response, eine TCP/IP-Verbindung und weniger Overhead bei der Adressierung. Der Browser muß das Archiv dann nur noch auspacken - das wäre nicht viel anders, als das Auspacken von *.jar-Dateien, was er ja bereits versteht, denke ich.
Ein solches Protokoll würde den heutigen Gegebenheiten des WWW wahrscheinlich viel besser entsprechen als HTTP/1.1 ... aber schon HTTP/1.1 wird ja von den existierenden Programmen nicht annähernd vollständig umgesetzt (der M$IE ist da ein besonders häßliches Beispiel), wie soll man da ein Nachfolgeprotokoll nicht nur definieren, sondern vor allem etablieren?
(Hm - da müßten sich mal die Apache- und die Mozilla-Entwickler an einen Tisch setzen ... grübel ...)
Allerdings: Clients und Server gibts immer im Internet. Was tun den ein IRC-Client und ein IRC-Server so viel anderes? Ping Pong, die ganze Zeit. Oder gibt es da ein Geheimnis bei IRC, das ich nicht kenne?
Wenn Du eine stehende Verbindung hast, dann kann der Server senden, wann immer er das für sinnvoll hält - und auch _nur_ dann. Wenn nicht, dann kann nur der Client aktiv nachsehen. Und das immer wieder - egal, ob eine neue Nachricht da ist oder nicht.
Und vermutlich sind bei IRC auch die Bälle kleiner.
Viele Grüße
Michael
T'Pol: I apologize if I acted inappropriately.
V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
(sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)