Reikalavimai: Kiekvieną dieną, atidarant tinklalapius ar programas, informacija, kurią naršote, beveik visada pasiekiama siunčiant HTTP arba HTTPS užklausų atsakymus. Naudojant C#, pagrįstą Hypertext Transfer Protocol ir natyviomis socket'ais, HTTP užklausoms siųsti.
susitarimas
Hiperteksto perdavimo protokolas (HTTP) yra be būsenos programų sluoksnio protokolas, naudojamas paskirstytoms, bendradarbiaujančioms hiperteksto informacinėms sistemoms.
HTTP / 1.1 protokolas (RFC 9112):Hipersaito prisijungimas matomas. HTTP Semantika (RFC 9110):Hipersaito prisijungimas matomas.
Pavyzdžio užklausa:
Pavyzdinis atsakymas:
HTTP/1.1 200 Gerai
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
Sveikas, pasauli! Mano turinys apima tęstinį CRLF.
Socket siunčia užklausas
Šaltinio kodas yra toks:
Šaltinio kodas palaiko užklausų siuntimą į HTTP ir HTTPS protokolus. Kaip parodyta žemiau:
Ryšys: arti ar išlaikyti gyvą
Jei naudojate ReadToEndAsync visiems atsakymo duomenims nuskaityti, turite nustatyti ryšį kaip uždarytą. Jei nustatote kaip keep-alive, ReadToEndAsync atsakymas užstrigs. Priežastys, kodėl neužstringa: Daugelis žiniatinklio serverių (pvz., Nginx, Apache ar tam tikri API vartai) aktyviai inicijuoja FIN paketą, kad uždarytų TCP ryšį, jei klientas yra natyvus ir rašo lizdą be jokių veiksmų arba jei serveris sukelia neveiklų laiko limitą (dažniausiai nustatytą 5 sekundėms).
HTTP vamzdynas, siunčiantis kelias užklausas vienu metu:Hipersaito prisijungimas matomas.
Transfer-Encoding: chunked 表示数据是以分块的形式传输的。每个数据块前面都有一个指示该块大小的十六进制数字,这个数字后面跟着一个换行符(CRLF),然后是实际的数据内容,再接着另一个换行符来结束这一块。这种编码方式允许服务器在不知道全部内容长度的情况下开始发送数据。
FDD8 yra toks šešioliktainis skaičius, kuris nurodo sekančio duomenų bloko (baitų) dydį. Konvertuojant fdd8 iš šešioliktainio į dešimtainį gaunama 65 016 baitų. Tai reiškia, kad iškart po fdd8 ir CRLF yra 65 016 baitų duomenų. Po to gali būti daugiau duomenų blokų, kol pasiekiamas 0 dydžio blokas, reiškiantis, kad perdavimas baigtas.
FDD8 praneša imtuvui, kad kitas duomenų blokas yra 65 016 baitų ilgio. |