O que acontece quando uma solicitação HTTP é finalizada prematuramente?

11

Suponha que eu digite um 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 terminar 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)?

Supondo 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 vai acontecer? Alcança até meu PC? Ou se perde no caminho?

Isto é apenas para minha curiosidade.

Obrigado pelo seu tempo:)

    
por Gowtham 03.06.2010 / 17:55

2 respostas

7

Bem, tudo depende do que o servidor está fazendo. Normalmente, ele não "detectará" a solicitação terminada até que um envio seja tentado. Nesse ponto, o script receberá uma mensagem user_abort do servidor da Web (em php, é possível dizer que ele ignore o usuário é anulado com ignore_user_abort(true); ). Sem tentar enviar dados para o cliente, não há como o servidor saber que a solicitação foi cancelada.

Quando ele tenta enviar a solicitação para a conexão TCP fechada, o que acontece é completamente dependente do software do servidor. O Apache funciona assim: Se os dados enviados ainda estiverem enquanto um script dinâmico estiver sendo processado, ele informará o script sobre o aborto e permitirá que ele manipule como deseja (o PHP - por padrão - termina). Se o script estiver pronto ou for uma solicitação de arquivo estático, ele apenas ignorará a conexão fechada e retornará.

    
por 03.06.2010 / 18:25
-2

Eu acho que isso deve ser pensado em eletricidade. carregar. quando alguma conexão termina, os dados enviados são uma carga, ela simplesmente desaparece, pois nenhum soquete de escuta está disponível para essa transferência específica. somente se houver um soquete, alguma comunicação acontece.

Exemplo:

Encontramos http://localhost para o 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 recebe nenhuma resposta. pelo menos 200 ok ou qualquer tipo de aperto de mão em tudo. então o que acontece com o nosso ping? http envia alguma coisa: como GET http://localhost 80 ... etc. o que acontece com esta linha? %código%? é apenas uma carga e desaparece.

Isso é apenas minha crença, e devemos primeiro nos referir ao TCP para maior clareza. Só então, podemos entender como o protocolo da Internet e o http subseqüente se comportam. Por fim, parece não haver uma definição concreta para uma solicitação HTTP terminada prematuramente. É por isso que é chamado de terminação prematura.

    
por 28.12.2013 / 00:06

Tags