Resposta HTTP após o cancelamento do pedido

0

Eu envio uma solicitação HTTP para um servidor. O servidor tem um manipulador de solicitações de longa execução e, após 10 segundos, retorna 200. Se eu cancelar uma solicitação e enviar imediatamente uma segunda solicitação, espero apenas uma resposta para a segunda solicitação. Mas também recebi resposta pelo primeiro pedido cancelado. Por que isso pode ocorrer?

Aqui está o log de troca do wireshark entre o cliente 192.168.1.3 e o servidor x.x.x.10

O pacote 21 é o primeiro pedido.
O pacote 57 é o primeiro cancelamento do pedido.
O pacote 184 é a resposta para o primeiro pedido. Não deveria estar aqui! (?)

    
por Alexey 25.06.2017 / 07:17

1 resposta

4

As conexões TCP são bidirecionais e uma única extremidade só fecha uma direção. Quando você cancelou sua solicitação no lado do cliente, você enviou um Fin e a pilha TCP do servidor Ack'd it, o que confirma que a direção cliente-servidor está fechada. Portanto, seria ilegal para o seu cliente enviar mais dados para o servidor nessa conexão agora. Mas como o servidor nunca enviou um Fin, a direção do servidor para o cliente ainda está aberta. Portanto, é legal que o servidor continue enviando dados nessa conexão, o que ela faz: a resposta HTTP.

Se você quisesse forçar ambas as direções fechadas imediatamente, você deveria ter enviado um TCP Reset (Rst) ao invés de um Fin.

    
por 25.06.2017 / 08:16