Sto provando a stabilire una connessione HTTP persistente da un'applicazione Silverlight a una pagina PHP (ovvero senza creare una nuova connessione TCP per ogni richiesta HTTP) ospitata da un server Apache."Connessione: keep-alive" nella risposta del server
A tal fine, ho bisogno che il server web invii le sue risposte HTTP con l'intestazione "Connessione" impostata su "Mantieni-vivi". Sul lato client, non sembra esserci alcun problema in quanto l'API di rete fornita da Silverlight è fondamentalmente un wrapper delle capacità di rete del browser, da quello che ho letto: quindi se il browser supporta HTTP 1.1 e Connection: Keep-Alive di default per le sue richieste, va bene. Content-Length è anche ben definito, in modo che il server sappia quando deve inviare la risposta. Tuttavia, la risposta del server alla richiesta PHP imposta sistematicamente "Connection:" su "close", terminando così la connessione e impedendo una connessione persistente.
Ho provato alcune cose per ovviare a questo problema: diversi metodi (GET e POST), dando esplicitamente una "Connessione: keep-alive" alla risposta con il seguente codice PHP all'inizio del mio script:
header("Connection: Keep-alive");
Quest'ultimo aggiunge l'intestazione prevista alla risposta, che è buona, ma un'aggiunta "Connessione: chiusa" viene aggiunta successivamente nelle intestazioni di risposta.
È una funzionalità di PHP o Apache che applica "chiudi" (per alcuni scopi di sicurezza o prestazioni, sto supponendo) o mi manca qualcosa qui?
Grazie in anticipo.
P.S. : Annusando i pacchetti, ho notato che non molti siti web usano "Keep-alive" e la connessione TCP è ristabilita. Keepalive non è il comportamento predefinito e preferito sotto HTTP 1.1?
Questo è probabilmente Apache, PHP non è - al meglio delle mie conoscenze, PHP ha alcun controllo su questo. È possibile verificare tentando di richiedere un file statico tramite la stessa connessione. Direttiva Apache: http://httpd.apache.org/docs/2.2/mod/core.html#keepalive –