Ich versuche, eine persistente HTTP-Verbindung von einer Silverlight-Anwendung zu einer PHP-Seite (dh ohne eine neue TCP-Verbindung für jede HTTP-Anfrage erstellen) von einem Apache-Server gehostet."Verbindung: Keep-Alive" in Server Antwort
Zu diesem Zweck muss der Webserver seine HTTP-Antworten mit dem Header "Connection" senden, der auf "Keep-Alive" gesetzt ist. Client-seitig scheint es kein Problem zu geben, da die von Silverlight bereitgestellte Netzwerk-API im Grunde ein Wrapper der Browser-Netzwerkfähigkeiten ist, von dem, was ich gelesen habe: wenn der Browser also HTTP 1.1 und Connection: Keep-Alive unterstützt standardmäßig für seine Anfragen, ist es in Ordnung. Content-Length ist auch gut definiert, so dass der Server weiß, wenn es die Antwort senden muss. Die Antwort des Servers auf die PHP-Anfrage setzt jedoch systematisch "Verbindung:" auf "Schließen", wodurch die Verbindung beendet und eine dauerhafte Verbindung verhindert wird.
Ich habe einige Dinge versucht, um dieses Problem zu umgehen: verschiedene Methoden (GET und POST), explizit eine "Verbindung: keep-alive" zu der Antwort mit dem folgenden PHP-Code am Anfang meines Skripts:
Letzterer fügt der Antwort den erwarteten Header hinzu, was gut ist, aber ein zusätzliches "Connection: close" wird später noch in den Antwortheadern angehängt.
Ist es eine Funktion von PHP oder Apache, die "nahe" erzwingt (aus Sicherheits- oder Leistungsgründen, vermute ich) oder fehlt mir hier etwas?
Vielen Dank im Voraus.
P.S. : Ich habe bemerkt, dass durch das Sniffing von Paketen nicht viele Webseiten "Keep-Alive" verwenden und die TCP-Verbindung wiederhergestellt wird. Ist Keepalive nicht das Standard- und bevorzugte Verhalten unter HTTP 1.1?
, die wahrscheinlich von Apache, PHP nicht - zum besten meines Wissens, haben PHP keine Kontrolle über diese. Sie können dies überprüfen, indem Sie versuchen, über dieselbe Verbindung eine statische Datei anzufordern. Apache-Direktive: http://httpd.apache.org/docs/2.2/mod/core.html#keepalive –