Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 537|Svar: 1

[Kilde] HttpClient i .NET/C# bruger Http/2.0-versionens protokol

[Kopier link]
Opslået den 31-8-2025 21:16:47 | | | |
Krav: De fleste hjemmesider bruger nu primært Http/1.1 og Http/2.0 versionprotokollerne, for hjemmesider, der kun understøtter HTTP/2-protokolversionen, vil HttpClient som standard sende anmodninger System.Net.Http.Http.Http.HttpRequestException: En fejl opstod under afsendelsen af anmodningen. ---> System.IO.IOException: Kan ikke læse data fra transportforbindelsen: Softwaren i din vært har afbrudt en etableret forbindelse. ---> System.Net.Sockets.SocketException (10053): Software i din vært afbryder en etableret forbindelse. på System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.CreateException(SocketError-fejl, Boolean forAsyncThrow).

Historien om HTTP-protokollen

Tidslinje



HTTP/0.9

Den forældede HTTP/0.9 var den første version af HTTP-protokollen, født i 1989. Det er ekstremt simpelt, idet det tillader klienten at sende en GET-anmodning og understøtter ikke anmodningsheaderen. Da der ikke er noget protokolheader, kan HTTP/0.9 kun understøtte én type indhold – almindelig tekst. Serveren kan kun svare på strenge i HTML-format, ikke andre formater. Når serveren er færdig med at sende, lukkes TCP-forbindelsen.
HTTP/0.9 har en typisk tilstandsløshed, hvor hvert besøg behandles uafhængigt og afbrydes, når behandlingen er afsluttet. Hvis den anmodede side ikke eksisterer, returneres der ingen fejlkoder.

HTTP/1

HTTP/1 er en samlebetegnelse for HTTP 1.0 og HTTP 1.1, som refererer til de versioner af HTTP-protokollen, der henholdsvis er 1.0 og 1.1.
HTTP 1.0 var den anden version af HTTP-protokollen og er stadig bredt anvendt i dag. Den har foretaget en række forbedringer og forbedringer baseret på HTTP/0.9, herunder:

Flere formater som billeder, videoer og binære filer kan sendes ud over blot tekst
Derudover er der tilføjet POST-anmodningsmetoder
Ændrede formatet på HTTP-forespørgsler og svar. Ud over datadelen skal hver kommunikation inkludere en HTTP-header, der beskriver nogle metadata, dvs. at anmodningsheader-informationen tilføjes
Tilføjede funktioner såsom responsstatuskode, understøttelse af multi-tegnsæt, autorisation, cache og indholdskodning
Selvom det stadig er en tilstandsløs protokol, kan lange forbindelser understøttes ved at tilføje "Connection: keep-alive"-headeren til forespørgslen

HTTP 1.1

HTTP 1.1 er en standardiseret protokol, og HTTP 1.1 eliminerer meget tvetydighed og introducerer flere forbedringer.

Ejendommelighed

Cache-behandling, HTTP 1.1 introducerer flere cachekontrolpolitikker, såsom Entity tag, If-Unmodified-Since, If-Match, If-None-Match osv., samt flere valgfrie cache-headere til at styre cachepolitikken.
Båndbreddeoptimering og brugen af netværksforbindelser introducerer et interval i anmodningsheaderen, som kun tillader én del af ressourcen at blive anmodet om, nemlig at returnere statuskoden 206, hvilket gør det lettere for udviklere frit at vælge at udnytte båndbredde og links fuldt ud, og kan bruge Range og Content-Range til at skabe en breakpoint-genoptagelsesfunktion.
Fejlmeddelelsesstyring, 24 nye fejlstatuskoder er blevet tilføjet i HTTP 1.1.
Ved at tilføje Host-headeren kan forskellige domænenavne konfigureres på servere med samme IP-adresse.
Understøtter lange forbindelser, HTTP 1.1 understøtter lange forbindelser, flere HTTP-anmodninger og svar kan sendes på en TCP-forbindelse, hvilket reducerer forbruget og forsinkelsen ved etablering og lukning af forbindelser, og Connection:keep-alive er aktiveret som standard i HTTP 1.1, og almindelige browsere tillader oprettelsen af 6 lange links samtidig for det samme domænenavn.
Tilføjet pipeline-teknologi for at tillade en anden anmodning at blive sendt, før det første svar er fuldt udsendt, for at forbedre køblokering, men rækkefølgen af svar vil stadig blive returneret i samme rækkefølge som anmodningerne.
Understøttelse af respons-chunking ved at sætte Transfer-Encoding: chunked for chunked response, hvilket tillader responsdata at blive opdelt i flere dele, og serveren kan frigive bufferen så hurtigt som muligt for at opnå hurtigere responshastighed.

HTTP 2.0

HTTP 2.0 har bedre ydeevne, og nu bliver websider mere og mere komplekse og udvikler sig endda til unikke applikationer; mængden af medieafspilning, størrelsen på scripts for at forbedre interaktionen er også steget meget, og mere data transmitteres via HTTP-anmodninger, så HTTP 2.0 har foretaget mange optimeringer for netværkseffektivitet.

Ejendommelighed

Binær rammeopdeling, HTTP 2.0 er en binær protokol snarere end en tekstprotokol, der opdeler al transmitteret information i mindre beskeder og rammer og koder dem i binært format.
Multiplexing, parallele forespørgsler kan behandles i det samme link, alle adgange under samme domænenavn kommer fra samme TCP-forbindelse, HTTP-beskeder opdeles i uafhængige rammer, og serveren samler beskederne igen efter identifikatorer og headers, hvilket fjerner rækkefølge- og blokeringsbegrænsningerne i HTTP 1.1.
Komprimering af headers, som ofte ligner i en række forespørgsler, fjerner omkostningerne ved duplikering og overførsel af duplikerede data.
Server-side push kan serveren proaktivt sende ressourcer til klienten uden eksplicit anmodning fra klienten.

HTTP 3.0

HTTP 3.0 er i øjeblikket i formulerings- og testfasen, er en ny HTTP-protokol i fremtiden, HTTP 3.0-protokollen kører oven på QUIC-protokollen, er baseret på UDP for at opnå pålidelig transmission, afvejning af transmissionshastighed og transmissionspålidelighed samt optimering, brug af UDP vil undgå TCP-køblokeringsproblemer og øge netværkstransmissionshastigheden, men også for at opnå en pålidelig transmissionsmekanisme, HTTP 3.0 er ikke en udvidelse af HTTP 2.0, HTTP 3.0 bliver en helt ny protokol.

HttpClientHandler VS SocketsHttpHandler

Den standard meddelelseshåndter, der bruges af HttpClient i .NET Framework og .NET Core 2.0 og tidligere, er HttpClientHandler.

Starter med .NET Core 2.1, klasserSocketsHttpHandler tilbyder en højere niveau HTTP-netværksklasse(f.eks. HttpClient). Brugen af SocketsHttpHandler giver mange fordele:

Ydelsen er forbedret markant sammenlignet med tidligere implementeringer.
Eliminer platformafhængigheder for at forenkle implementering og service. For eksempel er libcurl ikke længere afhængig af .NET Core for macOS og .NET Core for Linux.
Ensartet adfærd på tværs af alle .NET-platforme.

I .NET 9 bruger HttpClientFactory SocketsHttpHandler som hovedhandler

HttpClientFactory tillader konfiguration af HttpClient-pipelines for navngivne og typede HttpMessageHandler-objekter. Den inderste handler eller handler, der faktisk sender anmodninger på netværket, kaldes master handler. Hvis den ikke var konfigureret, var denne handler altid en HttpClientHandler før. Selvom standard master-håndtereren er implementeringsdetaljerne, er der brugere, der er afhængige af den. For eksempel kaster nogle brugere hovedhandleren til HttpClientHandler-indstillingen af egenskaber som ClientCertificates, UseCookies og UseProxy.

Sammenkæde:Hyperlink-login er synlig.

Den globale konfiguration anmoder om HTTP-protokolversionen

Koden er som følger:

DefaultRequestVersionStandardindstillingen er HttpVersion.Version11

DefaultRequestVersion-egenskaben specificerer standard HTTP-versionen, der skal bruges til forespørgsler sendt via denne HttpClient-instans, når den konstruerer HttpRequestMessage, der skal sendes, specifikt ved at kalde 、、、GetStreamAsyncGetAsyncGetAsyncGetGetArrayAsync, PatchAsyncGetStringAsync, PostAsync og PutAsync.

DefaultRequestVersion-egenskabenGælder ikke for SendAsync-metoden。 Parameteren HttpRequestMessage, der sendes til SendAsync-metoden som parameter, har sin egen versionegenskab, der styrer den HTTP-version, der bruges til forespørgslen.

Sammenkæde:Hyperlink-login er synlig.

HttpVersionPolicy forhandlingspolitik

RequestVersionOrLower: Brug den ønskede version, eller nedgrader til en lavere version (men ikke højere end den ønskede version). Dette er standardadfærden. Kort sagt er den mest brugte protokolversion den nuværende version, og hvis den nuværende protokolversion ikke understøttes, vil den blive nedgraderet.
RequestVersionOrHigher: Brug den højeste version, som serveren understøtter, men ikke lavere end den ønskede version. Det vil sige, opgraderinger er tilladt, og nedgraderinger under den ønskede version er ikke tilladt. Kort sagt, brug protokoller i højere versioner til kommunikation, når det er muligt.
RequestVersionExact: Brug strengt den ønskede version, ingen opgraderinger eller nedgraderinger er tilladt.

HttpClient bruger Http/2.0-versionens protokol

Testkoden er som følger:

Anmodningen bruger version 1.1, og den endelige klient og server forhandler om at bruge 2.0-protokollen til kommunikation, så det endelige svar er version 2.0, som vist i figuren nedenfor:



Henvisning:

Hyperlink-login er synlig.
Hyperlink-login er synlig.
Hyperlink-login er synlig.




Tidligere:MinIO-lagring (iii) Kopier-upload (migrer) lokale filer til minio-spanden
Næste:.NET/C# konverterer PDF'er til billeder baseret på ImageMagick, GhostScript
 Udlejer| Opslået den 31-8-2025 21:46:27 |
Anmodning afbrudt: Kunne ikke oprette en SSL/TLS sikker kanalløsning
https://www.itsvse.com/thread-7612-1-1.html
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com