Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 537|Vastaus: 1

[Lähde] HttpClient .NET/C#:ssa käyttää Http/2.0-versioprotokollaa

[Kopioi linkki]
Julkaistu 2025-8-31 21:16:47 | | | |
Vaatimukset: Useimmat verkkosivustot käyttävät nykyään pääasiassa Http/1.1- ja Http/2.0-versioprotokollia, ja sivustot, jotka tukevat vain HTTP/2-protokollaversiota, käyttävät oletuksena HttpClientia pyyntöjen lähettämiseen, lähettävät System.Net.Http.Http.Http.RequestException: Pyyntöä lähetettäessä tapahtui virhe. ---> System.IO.IOException: Ei pysty lukemaan dataa siirtoyhteydestä: Isäntäsi ohjelmisto on keskeyttänyt muodostuneen yhteyden. ---> System.Net.Sockets.SocketException (10053): Isäntäsi ohjelmisto keskeyttää muodostuneen yhteyden. osoitteessa System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.CreateException(SocketError error, Boolean forAsyncThrow).

HTTP-protokollan historia

Aikajana



HTTP/0.9

Vanhentunut HTTP/0.9 oli HTTP-protokollan ensimmäinen versio, joka syntyi vuonna 1989. Se on erittäin yksinkertainen: asiakas voi lähettää GET-pyynnön eikä tue pyyntöotsikkoa. Koska protokollan otsikkoa ei ole, HTTP/0.9 tukee vain yhtä sisältötyyppiä – tavallista tekstiä. Palvelin voi vastata vain merkkijonoihin HTML-muodossa, ei muissa formaateissa. Kun palvelin on lopettanut lähetyksen, TCP-yhteys suljetaan.
HTTP/0.9:llä on tyypillinen tilattomuus, jossa jokainen käynti käsitellään itsenäisesti ja irrotetaan, kun käsittely on valmis. Jos pyydettyä sivua ei ole, virhekoodeja ei palauteta.

HTTP/1

HTTP/1 on kollektiivinen termi HTTP 1.0:lle ja HTTP 1.1:lle, joka viittaa HTTP-protokollan versioihin, jotka ovat vastaavasti 1.0 ja 1.1.
HTTP 1.0 oli HTTP-protokollan toinen versio ja on edelleen laajasti käytössä. Se on tehnyt useita parannuksia ja parannuksia HTTP/0.9:n pohjalta, kuten:

Lisää formaatteja, kuten kuvia, videoita ja binäärejä, voidaan lähettää pelkän tekstin ulkopuolelle
Lisäksi ja POST-pyyntömenetelmät on lisätty
Muutin HTTP-pyyntöjen ja vastausten muotoa. Dataosan lisäksi jokaisessa viestissä on oltava HTTP-otsikko, joka kuvaa metatietoja, eli pyynnön otsikon tiedot lisätään
Lisätty funktioita, kuten vastaustilakoodi, monimerkkien tuki, valtuutus, välimuisti ja sisällön koodaus
Vaikka se on edelleen tilaton protokolla, pitkiä yhteyksiä voidaan tukea lisäämällä pyyntöön "Connection: keep-alive" -otsikko

HTTP 1.1

HTTP 1.1 on standardoitu protokolla, ja HTTP 1.1 poistaa paljon epäselvyyksiä ja tuo mukanaan useita parannuksia.

erikoisuus

Välimuistin käsittelyssä HTTP 1.1 tuo lisää välimuistin hallintapolitiikkoja, kuten Entity tag, If-Unmodified-Since, If-Match, If-None-Match jne., sekä lisää valinnaisia välimuistiotsikoita välimuistipolitiikan hallintaan.
Kaistanleveyden optimointi ja verkkoyhteyksien käyttö tuovat pyyntöotsikkoon alueen, joka sallii vain yhden osan resurssista pyytämisen, eli 206-tilakoodin palauttamisen, mikä helpottaa kehittäjien vapaata hyödyntämistä kaistanleveyttä ja linkkejä sekä käyttää Range- ja Content-Range-toimintoja katkopisteen uudelleenkäynnistysfunktion luomiseen.
Virheilmoitusten hallinta, HTTP 1.1:een on lisätty 24 uutta virhetilakoodia.
Isäntäotsikon lisääminen mahdollistaa eri verkkotunnuksen määrittämisen palvelimilla, joilla on sama IP-osoite.
Tukee pitkiä yhteyksiä, HTTP 1.1 tukee pitkiä yhteyksiä, useita HTTP-pyyntöjä ja vastauksia voidaan lähettää TCP-yhteydellä, mikä vähentää yhteyksien luomisen ja sulkemisen kulutusta ja viivettä, ja Connection:keep-alive on oletuksena käytössä HTTP 1.1:ssä, ja yleiset selaimet mahdollistavat samanaikaisen kuuden pitkän linkin perustamisen samalle verkkotunnukselle.
Lisätty putkistoteknologia, joka mahdollistaa toisen pyynnön lähettämisen ennen kuin ensimmäinen vastaus on kokonaan lähetetty, parantaen jonon estoa, mutta vastausten järjestys palautetaan edelleen pyyntöjen järjestyksessä.
Tue vastelohkoa asettamalla Transfer-Encoding: chunked chunked for chunked response, jolloin vastausdata voidaan jakaa useisiin osiin, ja palvelin voi vapauttaa puskurin mahdollisimman pian nopeamman vastenopeuden saavuttamiseksi.

HTTP 2.0

HTTP 2.0:lla on parempi suorituskyky, ja nyt verkkosivut muuttuvat yhä monimutkaisemmiksi ja kehittyvät jopa ainutlaatuisiksi sovelluksiksi, median toiston määrä, skriptien koko vuorovaikutuksen parantamiseksi ovat myös kasvaneet huomattavasti, ja HTTP-pyyntöjen kautta siirretään enemmän dataa, joten HTTP 2.0 on tehnyt paljon optimointeja verkon tehokkuuden parantamiseksi.

erikoisuus

Binary Frame Splitting, HTTP 2.0, on binääriprotokolla, ei tekstiprotokolla, joka jakaa kaiken lähetetyn tiedon pienempiin viesteihin ja kehyksiin ja koodaa ne binäärimuodossa.
Multiplexaus, rinnakkaiset pyynnöt voidaan käsitellä samassa linkissä, kaikki pääsyt saman verkkotunnuksen alla tulevat samasta TCP-yhteydestä, HTTP-viestit jaetaan itsenäisiin kehyksiin ja palvelin kokoaa viestit tunnisteiden ja otsikoiden mukaan, poistaen HTTP 1.1:n järjestyksen ja estorajoitteet.
Otsikoiden pakkaaminen, jotka ovat usein samankaltaisia pyynnöissä, poistaa päällekkäisyyden ja kaksoisdatan siirron kustannukset.
Palvelinpuolen työntö mahdollistaa resurssien proaktiivisen työntämisen asiakkaalle ilman suoraa pyyntöä asiakkaalta.

HTTP 3.0

HTTP 3.0 on parhaillaan muotoilu- ja testausvaiheessa, on uusi HTTP-protokolla tulevaisuudessa, HTTP 3.0 -protokolla toimii QUIC -protokollan päällä, perustuu UDP:hen varmistaakseen luotettavan siirron, kompromissien siirtonopeuden ja luotettavuuden sekä optimoinnin, UDP:n käyttö välttää TCP-jonon esto-ongelman ja nopeuttaa verkon siirtonopeutta, mutta myös luotettavan siirtomekanismin saavuttamiseksi. HTTP 3.0 ei ole HTTP 2.0:n laajennus, HTTP 3.0 tulee olemaan täysin uusi protokolla.

HttpClientHandler VS SocketsHttpHandler

Oletusviestinkäsittelijä, jota HttpClient käytti .NET Frameworkissa ja .NET Core 2.0:ssa ja aiemmissa, on HttpClientHandler.

Alkaen .NET Core 2.1:stä, luokatSocketsHttpHandler tarjoaa korkeamman tason HTTP-verkkoluokan.(esim. HttpClient). SocketsHttpHandlerin käyttö tarjoaa monia etuja:

Suorituskyky on parantunut merkittävästi aiempiin toteutuksiin verrattuna.
Poista alustariippuvuudet helpottaaksesi käyttöönottoa ja palvelua. Esimerkiksi libcurl ei enää ole riippuvainen .NET Coresta macOS:lle ja .NET Coresta Linuxille.
Johdonmukaista käyttäytymistä kaikilla .NET-alustoilla.

.NET 9:ssä HttpClientFactory käyttää pääkäsittelijänä SocketsHttpHandleria

HttpClientFactory mahdollistaa HttpClient-putkien konfiguroinnin nimetyille ja tyypitetuille HttpMessageHandler-objekteille. Sisin käsittelijä eli käsittelijä, joka oikeasti lähettää pyyntöjä verkossa, kutsutaan pääkäsittelijäksi. Jos sitä ei ole konfiguroitu, tämä käsittelijä oli aiemmin aina HttpClientHandler. Vaikka oletus master handler on toteutustiedot, on käyttäjiä, jotka luottavat siihen. Esimerkiksi jotkut käyttäjät lähettävät pääkäsittelijän HttpClientHandlerin asetusominaisuuksiin, kuten ClientCertificates, UseCookies ja UseProxy.

Linkki:Hyperlinkin kirjautuminen on näkyvissä.

Globaali konfiguraatio pyytää HTTP-protokollaversiota

Koodi on seuraava:

DefaultRequestVersionOletusasetus on HttpVersion.Version11

DefaultRequestVersion -ominaisuus määrittää oletusHTTP-version pyynnöille, joita lähetetään tällä HttpClient-instanssilla, kun se rakentaa lähetettävän HttpRequestMessage-viestin, erityisesti kutsumalla 、、、GetStreamAsyncGetAsyncGetByteArrayAsync, PatchAsyncGetStringAsync, PostAsync ja PutAsync.

DefaultRequestVersion ominaisuusEi koske SendAsync-menetelmää。 HttpRequestMessage-parametri, joka välitetään SendAsync-metodille parametrina, omaa oman Version-ominaisuutensa, joka ohjaa HTTP-versiota, jota pyynnölle käytetään.

Linkki:Hyperlinkin kirjautuminen on näkyvissä.

HttpVersionPolicy neuvottelupolitiikka

RequestVersionOrLower: Käytä pyydettyä versiota tai vaihda matalampaan versioon (mutta ei korkeampaan kuin pyydetty versio). Tämä on oletuskäytös. Yksinkertaisesti sanottuna eniten käytetty protokollaversio on nykyinen versio, ja jos nykyistä protokollaversiota ei tueta, se alennetaan.
RequestVersionOrHigher: Käytä palvelimen tukemaa korkeinta versiota, mutta ei alempaa kuin pyydetty versio. Eli päivitykset ovat sallittuja, ja alennukset pyydettyä versiota alemmat eivät ole sallittuja. Yksinkertaisesti sanottuna käytä viestintään korkeamman version protokollia aina kun mahdollista.
RequestVersionExact: Käytä pelkästään pyydettyä versiota, päivityksiä tai alennuksia ei sallita.

HttpClient käyttää Http/2.0-versioprotokollaa

Testikoodi on seuraava:

Pyyntö käyttää versiota 1.1, ja lopullinen asiakas ja palvelin neuvottelevat käyttävänsä 2.0-protokollaa viestintään, joten lopullinen vastaus on versio 2.0, kuten alla olevassa kuvassa näkyy:



Viittaus:

Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.




Edellinen:MinIO-tallennus (iii) Kopioi-lataa (siirrä) paikalliset tiedostot minio-ämpäriin
Seuraava:.NET/C# muuntaa PDF-tiedostot kuviksi ImageMagickin ja GhostScriptin pohjalta
 Vuokraisäntä| Julkaistu 2025-8-31 21:46:27 |
Pyyntö peruutettu: SSL/TLS-turvallisen kanavaratkaisun luominen epäonnistui
https://www.itsvse.com/thread-7612-1-1.html
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com