Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 1|Răspunde: 0

[Sursă] .NET/C# folosește Socket pentru a trimite cereri HTTP(s) bazate pe Hypertext Transfer Protocol

[Copiază linkul]
Postat peAcum 44 de secunde | | | |
Cerințe: În fiecare zi, când deschideți pagini web sau aplicații, informațiile pe care le navigați sunt aproape întotdeauna accesate prin trimiterea de răspunsuri la cereri HTTP sau HTTPS. Folosirea C# bazată pe Hypertext Transfer Protocol și socket-uri native pentru a trimite cereri HTTP.

acord

Protocolul de transfer hipertext (HTTP) este un protocol de nivel de aplicație fără stare, folosit pentru sistemele informatice hipertext distribuite și colaborative.

HTTP / Protocolul 1.1 (RFC 9112):Autentificarea cu hyperlink este vizibilă.
Semantica HTTP (RFC 9110):Autentificarea cu hyperlink este vizibilă.

Exemplu de cerere:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.64.1
Host: Autentificarea cu hyperlink este vizibilă.
Accept-Language: en, mi

Răspuns exemplu:
HTTP/1.1 200 OK
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

Salut, lume! Conținutul meu include un CRLF în urmă.

Socket trimite cereri

Codul sursă este următorul:
Codul sursă suportă trimiterea cererilor către protocoale HTTP și HTTPS. După cum se arată mai jos:



Conexiune: apropiere vs menținere în viață

Dacă folosești ReadToEndAsync pentru a citi toate datele din răspuns, trebuie să setezi Connection să se închidă. Dacă îl setezi pe keep-alive, răspunsul ReadToEndAsync se va bloca. Motivele pentru care nu se blochează: Multe servere web (precum Nginx, Apache sau anumite gateway-uri API) inițiază activ un pachet FIN pentru a închide conexiunea TCP dacă clientul este nativ să scrie un socket fără nicio acțiune ulterioară sau dacă serverul declanșează un timeout inactiv (de obicei setat la 5 secunde).

Pipeline HTTP, trimiterea mai multor cereri simultan:Autentificarea cu hyperlink este vizibilă.

Transfer-Encoding: chunked 表示数据是以分块的形式传输的。每个数据块前面都有一个指示该块大小的十六进制数字,这个数字后面跟着一个换行符(CRLF),然后是实际的数据内容,再接着另一个换行符来结束这一块。这种编码方式允许服务器在不知道全部内容长度的情况下开始发送数据。

FDD8 este un astfel de număr hexazecimal care specifică dimensiunea următorului bloc de date (în octeți). Conversia fdd8 din hexazecimal în zecimal duce la 65.016 octeți. Aceasta înseamnă că imediat după fdd8 și CRLF sunt 65.016 octeți de date. După aceea, pot exista mai multe blocuri de date până când se întâlnește un bloc de dimensiune 0, indicând că transmisia este completă.

FDD8 informează receptorul că următorul bloc de date are o lungime de 65.016 octeți.




Precedent:Rezumatul site-ului de testare HTTP(s) (actualizat continuu)
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com