Suponha que eu insira uma URL no meu navegador e o navegador envie a solicitação HTTP. O servidor HTTP remoto aceita a solicitação e inicia uma tarefa longa para atender à solicitação.
Se eu encerrar a solicitação antes que ela seja concluída (por exemplo, pressione Esc ou no Firefox), como a solicitação é encerrada? O navegador comunicará essa solicitação de cancelamento ao servidor (acho que não)?
Presumindo que não, após a conclusão da tarefa longa, o que o servidor fará com o resultado? Ele envia de volta mesmo assim? Se isso acontecer, o que acontecerá? Chega até o meu PC? Ou se perde no caminho?
Isto é apenas para minha curiosidade.
Obrigado pelo seu tempo :)
Respostas:
Bem, tudo depende do que o servidor está fazendo. Normalmente, ele não "detecta" a solicitação finalizada até que um envio seja tentado. Nesse ponto, o script receberá uma mensagem user_abort do servidor web (em php, você pode dizer para ele ignorar o usuário que interrompe
ignore_user_abort(true);
). Sem tentar enviar dados para o cliente, não há como o servidor saber que a solicitação foi abortada.Quando ele tenta enviar a solicitação para a conexão TCP fechada, o que acontece depende completamente do software do servidor. O Apache funciona assim: Se os dados enviados ainda estiverem sendo processados por um script dinâmico, ele informará o script sobre a interrupção e permitirá que ele lide com ele da maneira que desejar (o PHP - por padrão - termina). Se o script estiver pronto ou for uma solicitação de arquivo estático, ele simplesmente ignorará a conexão fechada e retornará.
fonte
Eu acho que é para ser pensado no tipo de coisa de eletricidade. carregar. quando alguma conexão termina, os dados enviados são cobrados, apenas desaparecem, pois não há soquete de escuta disponível para essa transferência específica. somente se houver um soquete, alguma comunicação acontece.
Exemplo:
Nós batemos
http://localhost
para apache2 httpd. suponha que não esteja em execução. O navegador abre um soquete, envia uma mensagem para a porta 80 (padrão) e verifica se há alguma resposta. Como não há ouvinte, pois o apache não está em execução, essa solicitação de ping não obtém nenhuma resposta. pelo menos 200 ok ou qualquer tipo de aperto de mão. então o que acontece com o nosso ping? http envia alguma coisa: comoGET http://localhost 80
... etc. o que acontece com esta linha?GET http://localhost 80
? é apenas uma carga e desaparece.Esta é apenas a minha opinião, e devemos primeiro consultar o TCP para obter mais clareza. Somente então, podemos entender como o protocolo da Internet e o http subsequente se comportam. Por fim, parece que não existe uma definição concreta para uma solicitação HTTP finalizada prematura. É por isso que é chamado encerramento prematuro.
fonte