O que significa "Conexão: fechar" quando usado na mensagem de resposta?

30

Quando o cliente usa o Connection: closecabeçalho na mensagem de solicitação, isso significa que deseja que o servidor feche a conexão após enviar a mensagem de resposta.

Eu pensei que esse cabeçalho é usado apenas nas mensagens de solicitação, mas notei que ele também é usado nas mensagens de resposta. Por exemplo:

insira a descrição da imagem aqui

O que esse cabeçalho significa quando usado na mensagem de resposta?

Eu acho que isso significa que o servidor fechará a conexão após enviar a resposta à mensagem (mesmo que o cliente tenha usado o Connection: keep-alivecabeçalho na sua mensagem de solicitação). Estou correcto?

user365656
fonte

Respostas:

28

Sim isto está correcto. O servidor pode apenas dizer "Não aceito sua solicitação de manutenção e apenas fechará a conexão quando terminar".

Na RFC 2616, seção 14.10:

HTTP / 1.1 define a opção de conexão "fechar" para o remetente
sinalizar que a conexão será fechada após a conclusão da
resposta. Por exemplo,

   Connection: close

nos campos de solicitação ou de cabeçalho de resposta indica que a conexão NÃO DEVE ser considerada `persistente '(seção 8.1)
após a conclusão da solicitação / resposta atual.

Aplicativos HTTP / 1.1 que não suportam conexões persistentes DEVEM incluir a opção de conexão "fechar" em todas as mensagens.

Sven
fonte
3
Que IMO estranho, por que dizer que a conexão será fechada, se o servidor puder simplesmente fechá-la? O cliente não deveria ver que a conexão foi fechada pelo servidor. Alguma idéia de qual era o objetivo deste cabeçalho? Não vejo nenhum valor aqui.
Pavel P
11
@Pavel O aplicativo da Web inclui o cabeçalho http "Conexão: fechar" na resposta nos casos em que deseja informar o balanceador de carga front-end para fechar a conexão keep alive, caso o balanceador de carga esteja usando um.
Basil A
11
@BasilA para que o balanceador de carga feche a conexão com o servidor ou o cliente? O balanceador de carga IMO pôde ver que a conexão foi fechada pelo servidor e saberia disso sem ler nenhum cabeçalho. Também o inverso é verdadeiro: o servidor pode fechar a conexão sem o Connection: closecabeçalho
Pavel P
@Pavel O loadbalancer geralmente recebe várias conexões de vários clientes e utiliza a mesma conexão com o back-end usando a multiplexação por meio de uma conexão keep-alive. Quando alguns back-end talvez não desejem fazer parte dessa multiplexação, a resposta http do back-end deve incluir um "Connection: close" para informar o balanceador de carga para fechar sua conexão e parar a multiplexação. Isso é descrito em detalhes no Guia de balanceamento de carga da AWS (role para baixo até 'Conexões HTTP') docs.aws.amazon.com/elasticloadbalancing/latest/userguide/…
Basil A
2
@BasilA Parece que você está certo. Interessante. O campo de cabeçalho geral de conexão permite que o remetente especifique as opções desejadas para essa conexão específica e NÃO DEVE ser comunicada por proxies em outras conexões.
Daniel F