Cosa succede quando una richiesta HTTP viene terminata prematuramente?


13

Supponiamo di inserire un URL nel mio browser e il browser invia la richiesta HTTP. Il server HTTP remoto accetta la richiesta e avvia un'attività lunga per soddisfare la richiesta.

Se chiudo la richiesta prima che sia completa (ad esempio, premo Esc o in Firefox), come viene chiusa la richiesta? Il browser comunicherà questa richiesta di interruzione al server (penso che non lo faccia)?

Presumendo di no, al termine del lungo compito, cosa farà il server con il risultato? Lo rispedisce comunque? In tal caso, cosa accadrà? Raggiunge fino al mio PC? O si perde sulla strada?

Questo è solo per mia curiosità.

Grazie per il tuo tempo :)


2
Hai provato a eseguire un'acquisizione di WireShark? Rende davvero facile vedere cosa invia un computer a un altro sulla rete.
racyclist,

Risposte:


8

Bene, tutto dipende da cosa sta facendo il server. In genere, non "rileva" la richiesta terminata fino a quando non viene tentato un invio. A quel punto, lo script riceverà un messaggio user_abort dal server web (in php, puoi dire che ignora l'utente interrompe ignore_user_abort(true);). Senza tentare di inviare dati al client, non è possibile che il server sappia che la richiesta è stata interrotta.

Quando tenta di inviare la richiesta alla connessione TCP chiusa, ciò che accade dipende completamente dal software del server. Apache funziona in questo modo: se i dati inviati sono ancora durante l'elaborazione di uno script dinamico, comunicherà allo script l'interruzione e gli consentirà di gestirlo come vuole (PHP - per impostazione predefinita - termina). Se lo script è terminato o è una richiesta di file statico, ignorerà semplicemente la connessione chiusa e tornerà.


-2

Penso che si debba pensare all'elettricità in genere. caricare. quando una connessione termina, i dati inviati sono un addebito, scompaiono semplicemente perché non è disponibile alcuna presa di ascolto per quel particolare trasferimento. solo se è presente una presa, alcune comunicazioni avvengono.

Esempio:

Abbiamo colpito http://localhostper apache2 httpd. supponiamo che non sia in esecuzione. Il browser apre un socket, invia un messaggio alla porta 80 (impostazione predefinita) e controlla se c'è una risposta. Poiché non esiste alcun listener in quanto apache non è in esecuzione, questa richiesta ping non ottiene alcuna risposta. almeno 200 ok o qualsiasi tipo di stretta di mano. allora cosa succede al nostro ping? http invia qualcosa: come GET http://localhost 80... ecc. cosa succede a questa linea? GET http://localhost 80? è solo una carica e scompare.

Questa è solo la mia convinzione e dovremmo prima fare riferimento a TCP per maggiore chiarezza. Solo allora possiamo capire come si comportano il protocollo Internet e il successivo http. Alla fine, non sembra esserci alcuna definizione concreta per una richiesta http terminata prematura. Ecco perché si chiama risoluzione anticipata.


1
Anche se poetico, forse, questo è inesatto, e non un modo particolarmente utile per considerare l'impatto di questo.
Falcon Momot,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.