Que signifie «Connexion: fermer» lorsqu'il est utilisé dans le message de réponse?

30

Lorsque le client utilise l'en- Connection: closetête dans le message de demande, cela signifie qu'il souhaite que le serveur ferme la connexion après l'envoi du message de réponse.

Je pensais que cet en-tête n'est utilisé que dans les messages de demande, mais j'ai remarqué qu'il est également utilisé dans les messages de réponse. Par exemple:

entrez la description de l'image ici

Que signifie cet en-tête lorsqu'il est utilisé dans le message de réponse?

Je pense que cela signifie que le serveur fermera la connexion après l'envoi de la réponse au message (même si le client a utilisé l'en- Connection: keep-alivetête dans son message de requête). Ai-je raison?

user365656
la source

Réponses:

28

Oui, c'est correct. Le serveur peut simplement dire "Je ne supporte pas votre demande de maintien en vie et fermera simplement la connexion lorsque j'aurai terminé".

De RFC 2616, Section 14.10:

HTTP / 1.1 définit l'option de connexion "close" pour l'expéditeur pour
signaler que la connexion sera fermée une fois la
réponse terminée . Par exemple,

   Connection: close

dans les champs d'en-tête de demande ou de réponse indique que la connexion NE DEVRAIT PAS être considérée comme "persistante" (section 8.1) une
fois la demande / réponse actuelle terminée.

Les applications HTTP / 1.1 qui ne prennent pas en charge les connexions persistantes DOIVENT inclure l'option de connexion "fermer" dans chaque message.

Sven
la source
3
C'est bizarre IMO, pourquoi dire que la connexion sera fermée, si le serveur peut simplement la fermer? Le client ne devrait pas alors simplement voir que la connexion a été fermée par le serveur. Une idée quel était le point dans cet en-tête? Je ne vois aucune valeur ici.
Pavel P
1
@Pavel L'application Web inclut l'en-tête http "Connection: close" dans la réponse dans les cas où elle souhaite informer l'équilibreur de charge frontal de fermer la connexion de maintien en vie au cas où l'équilibreur de charge en utiliserait un.
Basil A
1
@BasilA pour que l'équilibreur de charge ferme la connexion au serveur ou au client? L'équilibreur de charge IMO pouvait voir que la connexion était fermée par le serveur et le saurait sans lire d'en-tête. L'inverse est également vrai: le serveur peut fermer la connexion sans l'en- Connection: closetête
Pavel P
@Pavel L'équilibreur de charge reçoit généralement plusieurs connexions de plusieurs clients et utilise la même connexion avec le backend en utilisant le multiplexage via une connexion permanente. Lorsque certains backends peuvent ne pas vouloir faire partie de ce multiplexage, la réponse http du backend doit inclure un "Connection: close" pour informer l'équilibreur de charge de fermer sa connexion et d'arrêter le multiplexage. Ceci est décrit en détail dans AWS Load Balancing Guide (faites défiler la page jusqu'à `` Connexions HTTP '') docs.aws.amazon.com/elasticloadbalancing/latest/userguide/…
Basil A
2
@BasilA On dirait que tu as raison. Intéressant. Le champ d'en-tête général de connexion permet à l'expéditeur de spécifier les options souhaitées pour cette connexion particulière et NE DOIT PAS être communiqué par des mandataires via d'autres connexions.
Daniel F