1. Contesto:
- Problemi di connessione persistenti: Per connessioni non persistenti, il browser può definire i confini dell'entità richiedente o di risposta in base al fatto che la connessione sia fuori uso o meno; Per connessioni continue, questo approccio ovviamente non funziona. A volte, anche se ho inviato tutti i dati, il browser non sa se arriveranno nuovi dati dalla connessione aperta, quindi aspetta semplicemente.
- Risolvi con la lunghezza del contenuto: Calcola la lunghezza dell'entità e comunica all'altra parte attraverso la testa. Il browser può capire che l'entità di risposta è over tramite l'informazione sulla lunghezza della Contenuto
- Nuovo problema con la lunghezza del contenuto: poiché il campo Lunghezza del contenuto deve riflettere veramente la lunghezza dell'entità, la lunghezza è sconosciuta per i contenuti generati dinamicamente fino alla creazione del contenuto. Al momento, per ottenere la lunghezza con precisione, puoi aprire solo un buffer abbastanza grande e aspettare che tutto il contenuto venga generato prima di calcolare. Tuttavia, questo richiede più overhead di memoria da un lato, dall'altro fa aspettare il client più a lungo.
- Abbiamo bisogno di un nuovo meccanismo che non si affidi alla lunghezza dell'intestazione e conosca i confini delle entità - Transfer-Encoding: a squam.
2. Codifica di trasferimento (a blocchi)
- Transfer-Encoding è un campo di intestazione HTTP (campo di intestazione di risposta), che letteralmente significa "codifica di trasferimento". L'ultima specifica HTTP definisce un solo tipo di trasporto di codifica: a blocchi.
- La codifica a blocchi è un meccanismo di trasferimento dati nel Protocollo di Trasferimento Ipertesto (HTTP) che consente di suddividere i dati HTTP inviati da un server web al client in più parti. La codifica del trasporto a blocchi è disponibile solo nella versione 1.1 del protocollo HTTP (HTTP/1.1).
- I dati vengono suddivisi in una serie di blocchi e inviati in uno o più blocchi in modo che il server possa inviare dati senza conoscere in anticipo la dimensione totale del contenuto inviato.
Metodi specifici
- Dopo aver aggiunto Transfer-Encoding: a pezzi nell'header, significa che il pacchetto è bloccato. In questo caso, le entità nel pacchetto devono essere trasmesse in una serie di blocchi.
- Ogni blocco contiene il valore della lunghezza esadecimale e i dati, e il valore della lunghezza è esclusivo di una riga, e la lunghezza non include il CRLF alla fine, né il CRLF alla fine dei dati a blocchi.
- Il valore della lunghezza dell'ultimo chunk deve essere 0, e i dati del chunk corrispondenti non hanno contenuto, indicando la fine dell'entità.
asp.net Codice base del test:
|