Che cosa significa "Connessione: chiudi" quando viene utilizzato nel messaggio di risposta?


30

Quando il client utilizza l' Connection: closeintestazione nel messaggio di richiesta, significa che desidera che il server chiuda la connessione dopo aver inviato il messaggio di risposta.

Ho pensato che questa intestazione fosse utilizzata solo nei messaggi di richiesta, ma ho notato che è usata anche nei messaggi di risposta. Per esempio:

inserisci qui la descrizione dell'immagine

Cosa significa questa intestazione quando viene utilizzata nel messaggio di risposta?

Penso che ciò significhi che il server chiuderà la connessione dopo aver inviato la risposta al messaggio (anche se il client ha usato l' Connection: keep-aliveintestazione nel suo messaggio di richiesta). Ho ragione?

Risposte:


28

Sì, questo è corretto. Il server può semplicemente dire "Non supporto la tua richiesta keep-alive e al termine della connessione chiuderò semplicemente".

Da RFC 2616, sezione 14.10:

HTTP / 1.1 definisce l'opzione di connessione "chiudi" affinché il mittente
segnali che la connessione verrà chiusa dopo il completamento della
risposta. Per esempio,

   Connection: close

nei campi dell'intestazione della richiesta o della risposta indica che la connessione NON DOVREBBE essere considerata "persistente" (sezione 8.1)
dopo il completamento della richiesta / risposta corrente.

Le applicazioni HTTP / 1.1 che non supportano connessioni permanenti DEVONO includere l'opzione di connessione "chiudi" in ogni messaggio.


3
È strano l'IMO, perché dire che la connessione verrà chiusa, se il server può semplicemente chiuderla? Il client non dovrebbe quindi vedere solo che la connessione è stata chiusa dal server. Qualche idea di quale fosse il punto in questa intestazione? Non vedo alcun valore qui.
Pavel P

1
@Pavel L'applicazione Web include l'intestazione http "Connessione: chiudi" nella risposta nei casi in cui desidera informare il bilanciamento del carico front-end per chiudere la connessione keep-alive nel caso in cui il bilanciamento del carico ne stia utilizzando uno.
Basilio

1
@BasilA in modo che il bilanciamento del carico chiuda la connessione al server o al client? Il bilanciamento del carico IMO poteva vedere che la connessione era chiusa dal server e lo avrebbe saputo senza leggere le intestazioni. Anche il contrario è vero: il server può chiudere la connessione senza l' Connection: closeintestazione
Pavel P

@Pavel Il loadbalancer di solito riceve più connessioni da più client e utilizza la stessa connessione con il back-end utilizzando il multiplexing tramite una connessione keep-alive. Quando alcuni back-end potrebbero non voler far parte di questo multiplexing, la risposta http del back-end dovrebbe includere una "Connessione: close" per informare il bilanciamento del carico a chiudere la connessione e interrompere il multiplexing. Questo è descritto in dettaglio in AWS Load Balancing Guide (Scorri verso il basso fino a "HTTP Connections") docs.aws.amazon.com/elasticloadbalancing/latest/userguide/…
Basil A

2
@BasilA Sembra che tu abbia ragione. Interessante. Il campo Intestazione generale connessione consente al mittente di specificare le opzioni desiderate per quella particolare connessione e NON DEVE essere comunicato dai proxy su ulteriori connessioni.
Daniel F,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.