2011-05-19 10 views

risposta

11

Ciò significa che è OK mantenere aperta la connessione per chiedere più risorse come ad esempio immagini e fogli di stile.

+1

quindi è sbagliato dire "HTTP è senza stato", può essere pieno di stato in questo caso, giusto? – kern

+2

No, l'HTTP è in effetti senza stato. Ciò significa che i dati restituiti dal server non dipendono da azioni precedenti dell'utente. I cookie e altri metodi non HTTP sono ciò che rende il sito Web come di stato, consentendo all'utente, ad esempio, di accedere e uscire sui siti Web. Lo stato in questo senso non ha nulla a che fare con la connessione. – Kris

+0

controllare anche questa pagina: http://www.io.com/~maus/HttpKeepAlive.html – Kris

1

Il protocollo è in effetti senza stato, ma keep-alive indica che la connessione deve essere mantenuta aperta tra client e server.

apertura di una connessione TCP è un'operazione relativamente pesante, e mantenendo tale collegamento aperto evita il costo di installazione e smontaggio associata con l'apertura di una nuova connessione.

+0

Come può essere stateless se la connessione è persistente? – kern

4

come sappiamo connessione HTTP è chiuso quando la richiesta viene risposto

Che cosa è una connessione HTTP? In realtà, si tratta di una connessione socket su cui è implementato HTTP. Solo in HTTP 1.0 la connessione viene chiusa dopo ogni risposta. Al fine di risparmiare sul costo della creazione di una connessione TCP/IP, HTTP1.1 specifica che a meno che il client invia un colpo di testa

Connection:close 

o il server torna con la stessa intestazione, quindi il socket rimane aperto. Puoi inserire quante richieste desideri in questo socket e le risposte torneranno nell'ordine in cui sono state richieste. Ciò richiede che la risposta sia inviata con una codifica di trasferimento chunked o che contenga un'intestazione content-length in modo che la fine di ogni risposta possa essere rilevata/calcolata.

Il proxy-connection intestazione è diverso ancora una volta, ed è relativo solo alla conversazione tra client server e proxy.

Consiglierei questa pagina come guida eccellente per il protocollo.

HTTP Made Really Easy

+0

come può garantire 'le risposte torneranno nell'ordine in cui sono state richieste? Se la connessione è persistente? Probabilmente la richiesta successiva ottiene la sua risposta prima, giusto? – kern

+1

Questa è la responsabilità del server. Dato un ordine di richieste su un singolo socket, il server DEVE rispondere nello stesso ordine. – spender

1

Keep-alive non ha nulla a che fare con statefulness.

In rete, una delle operazioni più costose è quella di aprire e chiudere ripetutamente i collegamenti. Le moderne pagine HTML, tuttavia, ti chiedono tecnicamente di fare esattamente questo: prima, prendi la pagina, poi prendi ciascuna risorsa e ripeti finché non hai tutto. Dal momento che sarebbe incredibilmente lento, HTTP/1.1 consente agli agenti di mantenere la connessione attiva fino a quando non ha tutto ciò che vuole dal server.

Keep-alive è fondamentalmente il browser web dice il server non appendere ancora.

+0

quindi cosa c'entra con lo stato? – kern

+0

In HTTP, nulla, perché HTTP è un protocollo stateless. Ogni richiesta in HTTP è fatta nel vuoto. Contrasto TCP in cui ogni pacchetto successivo che si invia è una continuazione del pacchetto precedente. TCP deve prendere nota di come viene ricevuto ciascun pacchetto in modo che possa creare un messaggio significativo per i protocolli superiori (come HTTP). Questo è ciò che rende lo stato di un protocollo: il fatto che ogni richiesta/pacchetto è una parte di una conversazione piuttosto che una singola richiesta/pacchetto – 3Doubloons

2

Questa questione è già risposto ed accettato, ma vorrei spiegare in dettaglio:

keep-alive non può mantenere una connessione per sempre; l'applicazione in esecuzione nel server determina il limite con cui mantenere attiva la connessione e, nella maggior parte dei casi, è possibile configurare questo limite.

In HTTP/1.1, Keep-alive viene utilizzato per impostazione predefinita. Se i client hanno richieste aggiuntive, useranno la stessa connessione per loro.

Il termine stateless non significa che il server non ha la capacità di mantenere una connessione . Significa semplicemente che il server non riconosce alcuna relazione tra due richieste.

Problemi correlati