Suponha que eu insira um URL em meu navegador e o navegador envie a solicitação HTTP. O servidor HTTP remoto aceita a solicitação e inicia uma longa tarefa para atender a solicitação.
Se eu encerrar a solicitação antes de ela ser concluída (por exemplo, pressionar Esc ou no Firefox), como a solicitação será encerrada? O navegador comunicará essa solicitação de interrupção ao servidor (acho que não)?
Presumindo que não, após a conclusão da longa tarefa, o que o servidor fará com o resultado? Ele envia de volta mesmo assim? Se isso acontecer, o que acontecerá? Chega até meu PC? Ou se perde no caminho?
Isso é apenas para minha curiosidade.
Obrigado pelo seu tempo :)
Responder1
Bem, tudo depende do que o servidor está fazendo. Normalmente, ele não "detectará" a solicitação encerrada até que um envio seja tentado. Nesse ponto, o script receberá uma mensagem user_abort do servidor web (em php, você pode dizer para ignorar o usuário aborta com ignore_user_abort(true);
). Sem tentar enviar dados ao cliente, não há como o servidor saber que a solicitação foi abortada.
Quando tenta enviar a solicitação para a conexão TCP fechada, o que acontece depende totalmente do software do servidor. O Apache funciona assim: Se os dados enviados ainda estiverem enquanto um script dinâmico está sendo processado, ele informará ao script sobre a interrupção e permitirá que ele trate como quiser (o PHP --por padrão-- termina). Se o script estiver concluído ou for uma solicitação de arquivo estático, ele simplesmente ignorará a conexão fechada e retornará.
Responder2
Eu acho que é para ser pensado no tipo de coisa de eletricidade. cobrar. quando alguma conexão termina, os dados enviados são cobrados, eles simplesmente desaparecem, pois não há soquete de escuta disponível para aquela transferência específica. somente se houver um soquete, alguma comunicação acontece.
Exemplo:
Acessamos http://localhost
o apache2 httpd. suponha que não esteja funcionando. 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 porque o Apache não está em execução, esta 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: tipo GET http://localhost 80
... etc. o que acontece com esta linha? GET http://localhost 80
? é apenas uma carga e desaparece.
Esta é apenas a minha convicção, e devemos primeiro referir-nosTCPpara mais clareza. Só então poderemos entender como o protocolo da Internet e o subsequente http se comportam. Em última análise, parece não haver uma definição concreta para uma solicitação HTTP encerrada prematuramente. É por isso que é chamado de rescisão prematura.