Was bedeutet "Connection: close", wenn es in der Antwortnachricht verwendet wird?

30

Wenn der Client den Connection: closeHeader in der Anforderungsnachricht verwendet, bedeutet dies, dass der Server die Verbindung nach dem Senden der Antwortnachricht schließen soll.

Ich dachte, dass dieser Header nur in den Anforderungsnachrichten verwendet wird, aber ich habe bemerkt, dass er auch in den Antwortnachrichten verwendet wird. Beispielsweise:

Bildbeschreibung hier eingeben

Was bedeutet dieser Header, wenn er in der Antwortnachricht verwendet wird?

Ich denke, dass es bedeutet, dass der Server die Verbindung nach dem Senden der Antwort der Nachricht schließen wird (auch wenn der Client den Connection: keep-aliveHeader in seiner Anforderungsnachricht verwendet hat). Hab ich recht?

user365656
quelle

Antworten:

28

Ja das ist korrekt. Der Server kann nur sagen "Ich unterstütze Ihre Keep-Alive-Anfrage nicht und trenne die Verbindung nur, wenn ich fertig bin".

Aus RFC 2616, Abschnitt 14.10:

HTTP / 1.1 definiert die Verbindungsoption "Schließen", mit der der Absender
signalisiert, dass die Verbindung nach Abschluss der
Antwort geschlossen wird. Beispielsweise,

   Connection: close

In den Anforderungs- oder Antwortheaderfeldern wird angegeben, dass die Verbindung
nach Abschluss der aktuellen Anforderung / Antwort NICHT als persistent (siehe Abschnitt 8.1) betrachtet werden SOLLTE .

HTTP / 1.1-Anwendungen, die keine dauerhaften Verbindungen unterstützen, MÜSSEN in jeder Nachricht die Verbindungsoption "Schließen" enthalten.

Sven
quelle
3
Das ist komisch IMO, warum soll man sagen, dass die Verbindung geschlossen wird, wenn der Server sie einfach schließen kann? Sollte der Client dann nicht einfach sehen, dass die Verbindung vom Server geschlossen wurde. Irgendeine Idee, worum es in diesem Header ging? Ich sehe hier keinen Wert.
Pavel P
1
@Pavel Die Webanwendung enthält den http-Header "Connection: close" in der Antwort, wenn der Front-End-Load-Balancer benachrichtigt werden soll, um die Keep-Alive-Verbindung zu schließen, sofern der Load-Balancer eine verwendet.
Basil A
1
@BasilA damit Load Balancer die Verbindung zum Server oder zum Client schließt? IMO Load Balancer konnte feststellen, dass die Verbindung vom Server geschlossen wurde und würde dies wissen, ohne Header zu lesen. Auch umgekehrt ist wahr: Server kann Verbindung ohne den Connection: closeHeader schließen
Pavel P
@Pavel Der Loadbalancer empfängt normalerweise mehrere Verbindungen von mehreren Clients und verwendet dieselbe Verbindung mit dem Backend, indem er Multiplexing über eine Keep-Alive-Verbindung verwendet. Wenn einige Backends möglicherweise nicht an diesem Multiplexing teilnehmen möchten, sollte die http-Antwort des Backends die Meldung "Connection: close" (Verbindung schließen) enthalten, um den Load Balancer zu informieren, die Verbindung zu schließen und das Multiplexing zu beenden. Dies wird ausführlich im AWS Load Balancing-Handbuch beschrieben (Scrollen Sie nach unten zu "HTTP Connections"). Docs.aws.amazon.com/elasticloadbalancing/latest/userguide/…
Basil A
2
@BasilA Sieht so aus, als hättest du recht. Interessant. Das Feld Connection general-header ermöglicht es dem Absender, Optionen anzugeben, die für diese bestimmte Verbindung gewünscht werden und NICHT von Proxys über weitere Verbindungen übertragen werden dürfen.
Daniel F