1. Taustaa:
- Pysyvät yhteysongelmat: Ei-pysyvissä yhteyksissä selain voi määritellä pyytävän tai vastaajan rajat sen mukaan, onko yhteys poissa vai ei; Jatkuvissa yhteyksissä tämä lähestymistapa ei tietenkään toimi. Joskus, vaikka olen lähettänyt kaiken datan, selain ei tiedä, tuleeko avoimesta yhteydestä uutta dataa, joten se vain odottaa.
- Ratkaise sisällön pituudella: Laske entiteettien pituus ja kerro toiselle osapuolelle pään kautta. Selain voi päätellä, että vastausentiteetti on ohi, Content-Lengthin pituustiedon perusteella
- Uusi ongelma Content-lengthin kanssa: Koska Content-Length-kentän täytyy todella heijastaa entiteettien pituutta, pituutta ei tiedetä dynaamisesti tuotetulle sisällölle ennen kuin sisältö on luotu. Tällä hetkellä, jotta saat pituuden tarkasti, voit avata vain tarpeeksi suuren puskurin ja odottaa, että kaikki sisältö on generoitu ennen laskemista. Tämä kuitenkin vaatii toisaalta enemmän muistikuormaa, ja toisaalta se saa asiakkaan odottamaan pidempään.
- Tarvitsemme uuden mekanismin, joka ei perustu otsikon pituuteen ja tuntee entiteettien rajat – Transfer-Encoding: chunked.
2. Siirtokoodaus (lohkottu)
- Transfer-Encoding on HTTP-otsikkokenttä (vastausotsikkokenttä), joka tarkoittaa kirjaimellisesti "siirtokoodausta". Uusin HTTP-määrittely määrittelee vain yhden koodaussiirron tyypin: chunked.
- Chunked transfer encoding on Hypertext Transfer Protocolin (HTTP) datansiirtomekanismi, joka mahdollistaa web-palvelimen asiakkaalle lähettämän HTTP-datan jakamisen useisiin osiin. Lohkosiirtokoodaus on saatavilla vain HTTP-protokollan versiossa 1.1 (HTTP/1.1).
- Data jaetaan sarjaan lohkoja ja lähetetään yhdessä tai useammassa lohkossa, jotta palvelin voi lähettää dataa tietämättä etukäteen lähetetyn sisällön kokonaiskokoa.
Erityiset menetelmät
- Kun lisätään Transfer-Encoding: chunked otsikkoon, se tarkoittaa, että paketti on chunked. Tässä tapauksessa paketin entiteetit täytyy lähettää sarjana lohkoja.
- Jokainen lohko sisältää heksadesimaalipituusarvon ja datan, ja pituusarvo on yksinomaan yhdelle riville, eikä pituus sisällä CRLF:ää sen lopussa eikä CRLF:ää lohkotun datan lopussa.
- Viimeisen chunk-pituuden arvon täytyy olla 0, ja vastaavalla chunk-datalla ei ole sisältöä, mikä osoittaa entiteemin lopun.
asp.net Ydintestikoodi:
|