HTTP - che è il protocollo di trasporto vero e proprio tra il server e il client - è "senza stato", perché non ricorda nulla tra le chiamate. OGNI risorsa a cui si accede tramite HTTP è una singola richiesta senza connessione filettata tra di loro.Se si carica una pagina Web con un file HTML che al suo interno contiene tre tag <img>
che colpiscono lo stesso server, ci saranno quattro connessioni TCP negoziate e aperte, quattro trasferimenti di dati, quattro connessioni chiuse. Semplicemente non c'è stato conservato presso il server al protocollo livello che avrà il server sapere nulla di te come si arriva in.
(Beh, questo è vero per HTTP fino a 1,0 in ogni caso. HTTP 1.1 aggiunge meccanismi di connessione persistenti di vario tipo a causa degli inevitabili problemi di prestazioni che un protocollo veramente stateless genera. Per il momento ignoreremo questo perché non rendono veramente lo stato HTTP, lo rendono solo sporco-stateless invece che puro- apolidi.)
Per aiutarti a capire la differenza, immagina che un protocollo come Telnet o SSH fosse senza stato. Se si desidera ottenere un elenco di directory di un file remoto, è necessario, come operazione atomica, connettersi, accedere, passare alla directory ed eseguire il comando ls
. Quando il comando ls
ha terminato di visualizzare il contenuto della directory, la connessione si chiudeva. Se si desidera visualizzare il contenuto di un file specifico, è necessario connettersi nuovamente, accedere, passare alla directory e ora inviare il comando cat
. Quando il comando di visualizzazione del file è terminato, la connessione si chiuderà nuovamente.
Quando lo guardi in quel modo, anche se l'obiettivo di Telnet/SSH, sembra abbastanza stupido, non è così? Beh, per certi versi lo è e per certi versi non lo è. Quando un protocollo è stateless, il server può fare delle ottimizzazioni piuttosto buone e i dati possono essere diffusi facilmente. I server che utilizzano protocolli stateless possono scalare in modo molto efficace, quindi mentre i singoli trasferimenti di dati effettivi possono essere molto lenti (l'apertura e la chiusura delle connessioni TCP NON è economica!) Un sistema generale può essere molto, molto efficiente e scalabile per qualsiasi numero di utenti.
Ma ...
Quasi tutto quello che vuoi fare altro che la visualizzazione di pagine web statiche coinvolgerà le sessioni e gli stati. Quando HTTP viene utilizzato per il suo scopo originale (condivisione di informazioni statiche come documenti scientifici) il protocollo stateless ha molto senso. Quando si inizia a utilizzarlo per cose come applicazioni web, negozi online, ecc., L'apolidia inizia a essere un problema perché si tratta di attività intrinsecamente stateful. Di conseguenza le persone molto rapidamente hanno escogitato dei modi per aumentare lo stato in base al protocollo stateless. Questi meccanismi hanno incluso cose come i cookie, come lo stato di codifica negli URL e il fatto che i server attivano dinamicamente i dati in base a quelli, come le richieste di stato nascoste, come ... beh, come un sacco di cose fino al più moderno cose come Web Sockets.
Qui ci sono alcuni link è possibile seguire per ottenere una più profonda comprensione dei concetti:
darci qualche riferimento al libro/carta Stai studiando. Non capisco perché stai mescolando insieme lo stato di un protocollo di rete con uno stato di un oggetto in una singola domanda? Dove possiamo trovare quell'informazione sui fagioli Spring che hai menzionato? – Ritesh