Prasības: Lielākā daļa vietņu tagad galvenokārt izmanto Http/1.1 un Http/2.0 versijas protokolus, vietnēm, kas atbalsta tikai HTTP/2 protokola versiju, izmantojot HttpClient, lai nosūtītu pieprasījumus pēc noklusējuma, izmetīs System.Net.Http.Http.Http.HttpRequestException: nosūtot pieprasījumu, radās kļūda. ---> System.IO.IOException: Nevar nolasīt datus no transporta savienojuma: resursdatora programmatūra ir pārtraukusi izveidoto savienojumu. ---> System.Net.Sockets.SocketException (10053): resursdatora programmatūra pārtrauc izveidotu savienojumu. vietnē System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.CreateException(SocketError kļūda, Būla forAsyncThrow).
HTTP protokola vēsture
Laika grafiks
HTTP/0.9
Novecojušais HTTP/0.9 bija pirmā HTTP protokola versija, kas dzimusi 1989. gadā. Tas ir ļoti vienkārši, ļaujot klientam nosūtīt GET pieprasījumu un neatbalsta pieprasījuma galveni. Tā kā nav protokola galvenes, HTTP/0.9 var atbalstīt tikai viena veida saturu - vienkāršu tekstu. Serveris var atbildēt tikai uz virknēm HTML formātā, nevis citos formātos. Kad serveris ir pabeidzis sūtīšanu, TCP savienojums tiek slēgts. HTTP/0.9 ir tipiska bezvalstniecība, kur katrs apmeklējums tiek apstrādāts neatkarīgi un atvienots, kad apstrāde ir pabeigta. Ja pieprasītā lapa nepastāv, netiek atgriezti kļūdu kodi.
HTTP/1
HTTP/1 ir HTTP 1.0 un HTTP 1.1 kolektīvs termins, kas attiecas uz HTTP protokola versijām, kas ir attiecīgi 1.0 un 1.1. HTTP 1.0 bija otrā HTTP protokola versija un joprojām tiek plaši pieņemta šodien. Tajā ir veikti vairāki uzlabojumi un uzlabojumi, pamatojoties uz HTTP/0.9, tostarp:
Var nosūtīt vairāk formātu, piemēram, attēlus, videoklipus, bināros failus Papildus ir pievienotas POST pieprasījuma metodes Mainīts HTTP pieprasījumu un atbilžu formāts. Papildus datu daļai katrā saziņā ir jāiekļauj HTTP galvene, kas apraksta dažus metadatus, t.i., tiek pievienota pieprasījuma galvenes informācija Pievienotas tādas funkcijas kā atbildes statusa kods, vairāku rakstzīmju kopu atbalsts, autorizācija, kešatmiņa un satura kodēšana Lai gan tas joprojām ir bezvalstniecības protokols, garus savienojumus var atbalstīt, pieprasījumam pievienojot galveni "Savienojums: uzturēt dzīvību"
HTTP 1.1
HTTP 1.1 ir standartizēts protokols, un HTTP 1.1 novērš daudz neskaidrību un ievieš vairākus uzlabojumus.
Īpatnība
Kešatmiņas apstrāde, HTTP 1.1 ievieš vairāk kešatmiņas kontroles politiku, piemēram, Entity tag, If-Unmodified-Since, If-Match, If-None-Match utt., un vairāk izvēles kešatmiņas galvenes, lai kontrolētu kešatmiņas politiku. Joslas platuma optimizācija un tīkla savienojumu izmantošana pieprasījuma galvenē ievieš diapazonu, kas ļauj pieprasīt tikai vienu resursa daļu, tas ir, atgriezt 206 statusa kodu, kas ļauj izstrādātājiem vieglāk brīvi izvēlēties pilnībā izmantot joslas platumu un saites, un var izmantot diapazonu un satura diapazonu, lai izveidotu pārtraukuma punkta atsākšanas funkciju. Kļūdu paziņojumu pārvaldība, HTTP 1.1 ir pievienoti 24 jauni kļūdu statusa kodi. Resursdatora galvenes pievienošana ļauj konfigurēt dažādus domēnu nosaukumus serveros ar vienu un to pašu IP adresi. Atbalsta garus savienojumus, HTTP 1.1 atbalsta garus savienojumus, vairākus HTTP pieprasījumus un atbildes var pārsūtīt TCP savienojumā, samazinot savienojumu izveides un slēgšanas patēriņu un aizkavēšanos, un Connection:keep-alive ir iespējots pēc noklusējuma HTTP 1.1, un vispārējās pārlūkprogrammas ļauj vienlaicīgi izveidot 6 garas saites vienam un tam pašam domēna nosaukumam. Pievienota cauruļvadu tehnoloģija, kas ļauj nosūtīt otru pieprasījumu pirms pirmās atbildes pilnīgas nosūtīšanas, lai uzlabotu rindu bloķēšanu, bet atbilžu secība joprojām tiks atgriezta pieprasījumu secībā. Atbalstiet atbildes sadalīšanu, iestatot Transfer-Encoding: chunked for chunked response, ļaujot atbildes datus sadalīt vairākās daļās, un serveris var atbrīvot buferi pēc iespējas ātrāk, lai iegūtu ātrāku reakcijas ātrumu.
HTTP 2.0
HTTP 2.0 ir labāka veiktspēja, un tagad tīmekļa lapas kļūst arvien sarežģītākas un pat attīstās par unikālām lietojumprogrammām, arī multivides atskaņošanas apjoms, skriptu lielums, lai uzlabotu mijiedarbību, ir ievērojami palielinājies, un vairāk datu tiek pārraidīti, izmantojot HTTP pieprasījumus, tāpēc HTTP 2.0 ir veicis daudz optimizāciju tīkla efektivitātei.
Īpatnība
Binary Frame Splitting, HTTP 2.0 ir binārs protokols, nevis teksta protokols, kas sadala visu pārsūtīto informāciju mazākos ziņojumos un rāmjos un kodē tos binārā formātā. Multipleksēšana, paralēlie pieprasījumi var tikt apstrādāti vienā saitē, visas piekļuves ar vienu un to pašu domēna nosaukumu ir no viena TCP savienojuma, HTTP ziņojumi tiek sadalīti neatkarīgos rāmjos, un serveris atkārtoti saliek ziņojumus atbilstoši identifikatoriem un galvenēm, noņemot secību un bloķēšanas ierobežojumus HTTP 1.1. Galvenes saspiešana, kas bieži vien ir līdzīga pieprasījumu sērijā, novērš dublēšanas un datu dublikātu pārsūtīšanas izmaksas. Servera puses push, serveris var proaktīvi virzīt resursus klientam bez skaidra klienta pieprasījuma.
HTTP 3.0
HTTP 3.0 pašlaik ir formulēšanas un testēšanas stadijā, ir jauns HTTP protokols nākotnē, HTTP 3.0 protokols darbojas virs QUIC protokola, ir balstīts uz UDP, lai sasniegtu uzticamu pārraidi, kompromisu pārraides ātrumu un pārraides uzticamību un optimizētu, izmantojot UDP, izvairīsies no TCP rindas bloķēšanas problēmas un paātrinās tīkla pārraides ātrumu, bet arī jāpanāk uzticams pārraides mehānisms, HTTP 3.0 nav HTTP 2.0, HTTP paplašinājums 3.0 būs pilnīgi jauns protokols.
HttpClientHandler VS SocketsHttpHandler
Noklusējuma ziņojumu apdarinātājs, ko HttpClient izmanto .NET Framework un .NET Core 2.0 un vecākās versijās, ir HttpClientHandler.
Sākot ar .NET Core 2.1, klasesSocketsHttpHandler nodrošina augstāka līmeņa HTTP tīkla klasi(piemēram, HttpClient). SocketsHttpHandler izmantošana piedāvā daudzas priekšrocības:
Veiktspēja ir ievērojami uzlabojusies salīdzinājumā ar iepriekšējām ieviešanām. Novēršiet platformas atkarības, lai vienkāršotu izvietošanu un apkalpošanu. Piemēram, libcurl vairs nav atkarīgs no .NET Core operētājsistēmai macOS un .NET Core operētājsistēmai Linux. Konsekventa darbība visās .NET platformās.
Programmā .NET 9 HttpClientFactory izmanto SocketsHttpHandler kā galveno apdarinātāju
HttpClientFactory ļauj konfigurēt HttpClient cauruļvadus nosauktiem un ierakstītiem HttpMessageHandler objektiem. Iekšējo apdarinātāju vai apdarinātāju, kas faktiski sūta pieprasījumus tīklā, sauc par galveno apdarinātāju. Ja tas nav konfigurēts, šis apdarinātājs vienmēr bija HttpClientHandler iepriekš. Lai gan noklusējuma galvenais apdarinātājs ir ieviešanas detaļas, ir lietotāji, kas uz to paļaujas. Piemēram, daži lietotāji pārraida galveno apdarinātāju uz HttpClientHandler iestatījumu rekvizītiem, piemēram, ClientCertificates, UseCookies un UseProxy.
Saikne:Hipersaites pieteikšanās ir redzama.
Globālā konfigurācija pieprasa HTTP protokola versiju
Kods ir šāds:
DefaultRequestVersionNoklusējuma iestatījums ir HttpVersion.Version11。
Rekvizīts DefaultRequestVersion norāda noklusējuma HTTP versiju, kas jāizmanto pieprasījumiem, kas nosūtīti, izmantojot šo HttpClient instanci, kad tas veido nosūtāmo HttpRequestMessage, konkrēti, izsaucot 、、、GetStreamAsyncGetAsyncGetByteArrayAsync, PatchAsyncGetStringAsync, PostAsync un PutAsync.
Rekvizīts DefaultRequestVersionNeattiecas uz SendAsync metodi。 Parametram HttpRequestMessage, kas nodots metodei SendAsync kā parametram, ir savs rekvizīts Versija, kas kontrolē pieprasījumam izmantoto HTTP versiju.
Saikne:Hipersaites pieteikšanās ir redzama.
HttpVersionPolicy sarunu politika
RequestVersionOrLower: izmantojiet pieprasīto versiju vai pazeminiet uz zemāku versiju (bet ne augstāku par pieprasīto versiju). Šī ir noklusējuma darbība. Vienkārši sakot, visaugstāk izmantotā protokola versija ir pašreizējā versija, un, ja pašreizējā protokola versija netiek atbalstīta, tā tiks pazemināta.
RequestVersionVaiAugstāks: izmantojiet augstāko servera atbalstīto versiju, bet ne zemāku par pieprasīto versiju. Tas nozīmē, ka jauninājumi ir atļauti, un pazemināšana zem pieprasītās versijas nav atļauta. Vienkārši sakot, saziņai izmantojiet augstākas versijas protokolus, kad vien iespējams.
Pieprasījuma versijaPrecīza: Stingri izmantojiet pieprasīto versiju, nav atļauti jauninājumi vai pazeminājumi.
HttpClient izmanto Http/2.0 versijas protokolu
Testa kods ir šāds:
Pieprasījumā tiek izmantota versija 1.1, un galīgais klients un serveris vienojas par 2.0 protokola izmantošanu saziņai, tāpēc galīgā atbilde ir versija 2.0, kā parādīts attēlā zemāk:
Atsauce:
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama. |