Net-Base Iris

System.Net.HttpClient: Download mit Resume – Range-Requests, ETag-Prüfung und saubere Partial-File-Strategie

Wenn Downloads abbrechen, ist Resume verlockend – und riskant. So kombinierst du Range-Requests, If-Range/ETag und eine robuste .part-Strategie, ohne stille Dateikorruption zu bauen.

Oidhreacht. Athstruchtúrú. Inimirce.

Bogearraí atá fásaithe a nuachóiriú gan substaint fheidhmeach an chórais a chailleadh.

Seanchórais Delphi Athstruchtúrú cód Dul beo

Loighic réimse a chothabháil

Fanann loighic ghnó luachmhar le feiceáil agus ní chuirtear í i bhfolach faoi athscríobh iomlán.

Bunachar an chóid a dhícheangal

Freagrachtaí a scaradh ionas gur féidir le comhéadanacha nua agus seirbhísí nua nascadh go rialaithe.

Átógáil inbhainistithe

Seachadadh, tástáil agus cur i bhfeidhm céim ar chéim in ionad an oibriú a chur i mbaol le haistriú tobann.

24.10.2026

Ó théama an iris go cleachtas tionscadail

Leathanaigh seirbhíse agus teicniúla oiriúnacha don alt

Tá an radharc míthaitneamhach, ach tipiciúil: íoslódáil oibre oíche a luchtú cartlann mhór, tá an barra dul chun cinn ar 93 %. Ansin mionruilt VPN, am-éag, curtha ar ceal. Sa mhaidin tá comhad sa eolaire sprioc, méid “oiriúnach”, ach agus tú ag iarraidh é a dhíphacáil tagann ach “unexpected end of file”. Má chuir duine ansin go frithghníomhach “Resume” leis, téann sé go tapa chuig an gcás imeall eile: rith an íoslódáil tríd, ach tá sé comhdhéanta as dhá leagan.

Tá dírithe go sonrach ar seo Íoslódáil HttpClient le leanúint ar aghaidh — ach amháin má chóireálann tú é mar phíblíne sonraí bheag: le rialacha soiléire cén uair is féidir leat ceangail a dhéanamh, conas monatóireacht a dhéanamh ar shlándáil leagain (ETag/If-Range) agus conas stádas idirmheánach áitiúil (comhaid pháirteacha) a bhainistiú ionas nach mbeidh oibriú agus debugging ina chluiche tuartha.

Is féidir an coimhlint spriocanna a ainmniú go soiléir: bandaleithead agus ama a shábháil (leanúint ar aghaidh seachas tosú ó thús) in aghaidh ionracas agus inmharthanachta (gan meascán ciúin leaganacha, cinntí inchomhaireamh, sampla earráide in-athshlánaithe). Tá an méid seo struchtúrtha mar chárta meastóireachta: buntáiste, iarracht, rioscaí, teorainneacha — agus líne phragmatach, cé nuair ba chóir duit Resume a chur i bhfeidhm i ndáiríre agus cathain is fearr ath-iarracht shimplí.

Abwägungskarte: Zwei Ziele, ein harter Trade-off

Ní oireann Resume toisc go bhfuil sé “nua-aimseartha”, ach toisc go n-éilítear é i do thimpeallacht: comhaid mhóra, línte neamhbhuan, fuinneoga ama i baisc, úsáideoirí a scorann íoslódálacha, nó seirbhísí a gcaithfear leanúint orthu ó áit a stad siad tar éis ath-thosaithe. Ag an am céanna is é Resume an pointe ina gcuireann tú corruíl sonraí isteach go muirnín — agus bíonn sin le feiceáil go minic i bhfad níos déanaí (teip ar iompórtáil, síniú neamhbhailí, ní féidir socrú a reáchtáil).

Cás Sochar Resume Riosca tipiciúil Cinneadh indéanta
Comhaid mhóra thar WAN/VPN nó líonraí soghluaiste ard (am, bandaleithead) “200 ina ionad 206” a cheanglaítear gan seiceáil Resume: sea, ach cosanta (Status/Content-Range/Validator)
URLanna “latest” / foinsí gan ceangal leagan meán meascán leagan tar éis nuashonrú idirmheánach Resume ach amháin le validator láidir, murach sin ath-thosú
Stóráil inmheánach le ETags seasmhacha ard íseal, má tá na headers comhsheasmhach An-oiriúnach do Resume, meiteashonraí a choinneáil go buan
Comhaid bheaga (cúpla deich MB) íseal tá an chastaíocht i bhfad níos mó Íoslódáil iomlán + ath-iarracht/backoff is fearr de ghnáth
Proxies/CDNanna ag athrú, staid cheannlínte neamhshoiléir neamhsoiléir validators neamhiomlán, debugging deacair Ach amháin le logáil maith; murach sin go cúramach coimeádach

Cén fáth go bhfuil atosú níos mó ná ‚Range a shocrú‘

Tuigeann HTTP iarratais raon-baití tríd an gceannaire Range. An ráiteas tábhachtach, a cháineann go minic: tá tacaíocht Range roghnach. Is féidir le freastalaí Range a neamhaird agus freagairt amhail is gur GET gnáthúil é — mar sin le 200 OK agus an corp iomlán. Do chliaint ciallaíonn sé seo: tá an fhírinne sa fhreagra, ní i do rún san iarraidh.[Foinse]

Cliant atá ag atosú íoslódála a mheascann ‚Range seolta‘ le ‚tagann ábhar páirteach‘ cruthaíonn go díreach an earráid a chonaic tú ag tús na heachtra: cuirtear íoslódáil iomlán i gcomhcheangal le comhad atá cheana féin íoslódáilte go páirteach. Toradh: dealraíonn an comhad go bhfuil sé mór go leor, ach tá sé loighciúil briste.

Comhartha rath: 206 agus Content-Range réasúnta

Má oibríonn an atosú i ndáiríre, feiceann tú de ghnáth:

  • Stádas 206 Partial Content in áit 200 OK
  • Content-Range le Range-Unit bytes agus an Start-Offset a bhí ag súil leis
  • seiceálaithe comhsheasmhacha (m.sh. ETag), má úsáideann tú iad le haghaidh dílseacht leagan

Ní ’nice to have‘ iad na seiceálacha sin. Léiríonn RFC 9110 go soiléir nach bhfuil cead ag glacadóir freagra 206 le Range-Unit anaithnid a chomhcheangal le hionadaíocht stóráilte. Iarmhairt phraiticiúil: gan tuiscint cheart ar Content-Range, níl aon append.[Foinse]

If-Range agus ETag: An bealach glan in aghaidh meascán leagan

Is í an fhadhb lárnach beimid ag leanúint ní an teicníc chun gabháil a dhéanamh, ach an cheist: an bhfuil tú fós ag íoslódáil an acmhainní céanna? Soláthraíonn HTTP seiceálaithe sin. Is é ETag (Entity Tag) an t-uirlis is beartaí: tag freastalaí taobh-séir chun ionadaíocht shonrach a shainaithint. Is dáta é Last-Modified, minic úsáideach ach níos lú géar (réiteach ama, athphacáistiú, céimeanna idirmheánacha éagsúla trí CDNs).

An meicníocht don ‚Range ach amháin má tá an leagan céanna i ndáiríre‘ is é If-Range: seolann tú Range agus coinníoll. Má oireann an seiceálaí, seolfar an Range; mura n-oireann, ba chóir don fhreastalaí an acmhainn iomlán a chur ar fáil. Maidir le ETags: ní chomhlíonann an coinníoll ach i gcás meaitseáil láidir ETag (strong comparison). Ní ábhar léirmhínithe é seo — tá sé sa chaighdeán.[Foinse]

Sa chleachtas oibríochta: má dhiúltaíonn an freastalaí Range a thacaíocht, caithfidh sé If-Range a neamhaird. Bíonn sé seo cosúil le cúis chruthaitheach, ach tá sé ina riachtanas dhíreach don chliaint: caithfidh tú a bheith réidh le haghaidh 200 OK agus cinneadh soiléir a dhéanamh as sin (atosú ó thús, gan ceangal le comhad atá ann cheana).[Foinse]

Straitéis Comhad-Páirteach: an macasamhail áitiúil don seamantas HTTP

Atosú ciallaíonn: bainistíonn tú staid áitiúil. Agus ní mór don staid sin fanacht seasmhach tar éis taom cras, atosaigh, tosaigh comhthreomhar nó gníomh úsáideora (‚cliceáil arís‘). Tá trí réad i straitéis ghlan comhad-páirteach:

  • Comhad páirteach mar an t-aon áit scríbhneoireachta le linn an íoslódála (m.sh. foo.zip.part)
  • Meiteadáta stóráilte ar leith (m.sh. foo.zip.part.meta.json): URL, am, ETag, Last-Modified, fad ionchaithe (má tá ar eolas), más infheidhme Content-Type, chomh maith leis an fhad áitiúil ag an flush glan deireanach
  • Críoch adamhach: ní athainmnítear ná ní chuirtear i bhfeidhm an t-ainm deiridh ach tar éis an íoslódála iomlána agus seiceáil réasúnachta

Cén fáth meiteadáta? Mar mura bhfuil siad agat, ag an gcéad tosaithe eile beidh agat ach fad an chomhaid – ach ní bheidh fhios agat an bhfuil sé ag teacht leis an leagan freastalaí sin. Is é an fhaisnéis seo a chinneann an bhfuil tú in ann leanúint ar aghaidh.

HttpClient Download mit Resume: Entscheidungslogik, die du testen kannst

Soláthraíonn System.Net.HttpClient Requests, Responses agus Streams. Tagann an neart ó do mhatrís chinneadh. Má shocróidh tú í go soiléir, is féidir í a thástáil go soiléir freisin (lena n-áirítear „Server ignoriert Range“, „Validator mismatch“, „416“).

Próiseas íosta i 6 chéim

  1. Staid áitiúil a chinneadh: An bhfuil .part ann? Léigh an fad mar offset. Lódáil meiteadáta.
  2. Cinneadh an bhfuil Resume indéanta: Déan iarracht Resume ach amháin má tá Offset > 0 agus go bhfuil ar a laghad validator oiriúnach amháin sna meiteadátaí (ETag ar an bpríomhrogha).
  3. Iarratas a thógáil: Socraigh Range ón Offset. Ina theannta sin, socraigh If-Range (ETag ar dtús, mura bhfuil sin Last-Modified).
  4. Aicmiú Response:
    • 206: parsáil Content-Range, seiceáil go bhfuil Range-Unit bytes, caithfidh an offset tosaigh teacht go beacht. Ní chuirfear leis ach ansin.
    • 200: ná cuir leis riamh. Diúltaigh nó cuir i gcoraintín an stádas páirteach, agus íoslódáil arís é.
    • 416 Range Not Satisfiable: Níl an offset oiriúnach níos mó (áitiúil nó ar thaobh an fhreastalaí). Athshocraigh an staid agus tosú arís.
    • eile: cosán earráide le diagnóis shoiléir (logáil cód stádais + headers).
  5. Scríobh an sruth: i mbloic, flush go rialta, nuashonraigh meiteadáta (m.sh. „flush deireanach ag fad X“).
  6. Dúnadh: Seiceáil méid/reasúnachta (má tá sé indéanta). Ansin athainmnigh/athsholáthair go adamhach.

RangeHeaderValue: ní mionsonra é, ach cosc ar earráidí

.NET tugann an ranga chlárthaite RangeHeaderValue don Range-Header. Níl sé seo ach „cód níos deise“: laghdaíonn sé earráidí sintacsa i headers agus déanann sé logs níos intuigthe, mar go gcruthaíonn tú luachanna comhsheasmhacha. Tá Microsoft tar éis an ghné oibríochtúil thábhachtach a dhoiciméadú freisin: níl ar fhreastalaithe éigeantach tacaíocht a thabhairt do Range-Requests; is léiriú é Accept-Ranges, ní gealltanas.[Quelle]

Samhail tógtha: Nuair a bhriseann „200 OK“ do Resume

Pianta coitianta agus conas iad a aithint sa log

Accept-Ranges: comhartha cabhrach, ach gan barántas

Úsáideann go leor foirne Accept-Ranges mar chomhartha “go dtacaíonn an freastalaí le Resume”. Déanann MDN cur síos ar an gceannaire mar tháscaire tacaíochta (“gach rud seachas none”). Tá sé úsáideach do dhiagnóis agus don tetelemeolaíocht. Mar sin féin: ná déan cinneadh bunaithe air amháin riamh. D’fhéadfaidh proxy, geata údaraithe nó CDN an iompar a athrú. Caithfidh do loighic coinneáil ag brath i gcónaí ar an gcód stádais (206 vs. 200) agus ar an Content-Range, ní ar an mhuinín atá i Accept-Ranges.[Foinse]

ETaganna Laige (W/…) agus claochlú

Tagann ETaganna laige (W/"…") chun cinn níos minice ná mar is fearr leat. Maidir le If-Range áfach tá meaitseáil ETag láidir cinntí. Sa chleachtas ciallaíonn sé seo: má fhaigheann tú ach ETaganna laige tá an atosú níos lú iontaofa. Is féidir leat é a úsáid fós, ach bí níos coimeádach (m.sh. nuair a bhíonn aon easnamh beag, tosú arís) agus i gcás comhadanna go háirithe ríthábhachtacha déan iniúchadh iontaofachta lasmuigh den chainéal (seiceáil hash ó mhanaifist/ó API) más ann é sin.

Fad iomlán anaithnid (chunked) agus easpa inchreidteachta

Nuair nach soláthraítear Content-Length (m.sh. chunked Transfer), caillfidh tú an seiceáil chríochnaithe simplí „fhad áitiúil == fad a bhí beartaithe“. Is féidir le atosú oibriú fós, ach beidh ort bailíóirí soiléire agus logáil mhaith. Gan na tacaí sin éireoidh an dífhabhtú deacair, toisc nach mbeidh tú in ann a rá fiú an bhfuil baití in easnamh nó níos mó ná mar is gá.

Ilchodálú: ach amháin nuair atá an bunús láidir

Is féidir roinnt Ranges a íoslódáil go comhthreomhar, ach iolraíonn sé fadhbanna stáit: bainistiú earnála, Random-Write, comhdhéanamh, logáil earráide, Retry in aghaidh gach earnála. Do go leor réitigh bogearraí cóngarach do phróiseas is iomarca é. Is minic go bhfaightear an gnóthach seasmhach cheana féin trí: íoslódáil shraithúil + Resume + maitrís chinneadh shoiléir. Ní thógann ilchodálú leasa go dtí go bhfuil tú tar éis tacaíocht Range seasmhach a chruthú agus go léiríonn tomhais chruinne go bhfuil tú i ndáiríre ag sroicheadh teorainneacha an líonra nó an fhreastalaí.

Fabhtcheartú a thabharfaidh soiléireacht i 5 nóiméad

Níl fhabhtanna Resume de ghnáth “ach if mícheart”. Is minic gur meascán iad d’infreastruchtúr (Proxy/CDN), cumraíocht an fhreastalaí, am-éagtha agus staid áitiúil. Mar sin, is fiú logáil struchtúrtha a bheith agat do gach iarracht. Ní mar mhúr téacs, ach mar réimsí comhsheasmhacha:

  • Request: URL (gan sonraí rúnda), modh, Range (tús/deireadh), If-Range (ETag nó dáta).
  • Response: Stádaschód, Accept-Ranges, ETag, Last-Modified, Content-Length, Content-Range (amh agus pairsiáilte).
  • Staid áitiúil: cosán an .part, fad an .part roimh an iarratas, mód scríbhneoireachta (Append/Overwrite), fad tar éis an scríbhneoireachta.
  • Cinntí: “Resume glactha”, “Resume diúltaithe (200) – atosú”, “416 – athshocrú”, “Neamhchomhoiriúnacht bailíóra – atosú”.

Le na sonraí sin go beacht is féidir hipitéisí a thástáil: “An sáríonn an freastalaí Range?”, “An athraíonn an ETag idir na iarratais?”, “An bhfuil an oifset mícheart ríofa?”, “An scríobhann próiseas eile ag an am céanna?” – gan Wireshark a oscailt ar dtús.

Cathain a roghnóidh tú gan Resume a chur i bhfeidhm

Uaireanta is é an cinneadh ailtireachta is glan ná an ghné Resume a dhéanamh amach — ní de bhealaí compordach, ach toisc go gcuireann sí níos mó dála earráide ar fáil ná leas i do chás:

  • URL gan ceangal le leagan: Má tá ábhar nua á chur faoi ghluaiseacht sa URL céanna go rialta, is riosca íonachta é Resume gan bailíoir láidir.
  • Ní bhfuil bailíóirí úsáideacha: Má tá ETag ná Last-Modified neamhréidh nó neamhchobhsaí, is geall é “fortsetzung” (Resume). Iompraíonn sé níos measa go minic ná atosú rialaithe i gcásanna allmhairí criticiúla.
  • Íoslódáil beag agus minic: I gcásanna seo tá straitéisí Retry (am-éagtha, backoff, agus dá mbeadh ann Mirror-URL) níos inbhuanaithe agus níos éasca a mhíniú i mbainistíocht.

Líonta slándála pragmatacha a bhfuil luach leo

Cuarantán in ionad scriosadh

Nuair a theipeann iarracht Resume, ná scrios an .part go himeadlárnach. Athainmníodh é (m.sh. .part.bad + amstampa). Déanann sé fadhbanna freastalaí/proxy le feiceáil, toisc gur féidir leat ceannlíne na freagraí agus stádas an chomhaid a chur i gcomparáid níos déanaí. Agus seachnaíonn sé gur imíonn eachtra neamhchoitianta ónailís trí “glanadh” láithreach.

Blocáil in aghaidh tosaithe dúbailte

Má scríobhann dhá phróiseas an .part céanna ag an am céanna, bíonn gach bailíoir HTTP gan úsáid. Ní lúcháir é lock eisiach (lock comhaid nó mutex ar fud an chórais); is cosaint bhunúsach é. Is féidir le meitéadáta eolas an úinéara a iompar (ID insteance), ionas gur féidir leat íoslódálacha “leagtha” a aithint agus a ghlanadh go glan.

Rialacha ghearr atá de dhíth ort

  • Append amháin i gcás 206 – agus amháin le Content-Range seiceáilte (aonad bytes, oifset tosaigh ag teacht).
  • 200 ciallaíonn: atosú nua (overwrite), ná cuir riamh i gceangal é le comhad páirteach.
  • If-Range laghdaíonn meascán leagan, ach ní chuireann sé in ionad an chearta chun stádas/Content-Range a mheas.
  • 416 is comhartha athshocrú: ní oireann an oifset áitiúil níos mó — diúltaigh don staid/cur i gcúarantine.

Pointe deiridh: Ar dtús iontaofacht, ansin optamú

Is fearr íoslódáil HttpClient le Resume nuair a bhíonn sé leadránach: úsáidtear Range amháin nuair atá an staid áitiúil iontaofa, téann sé i ngéarchéim amháin le 206 agus má sheiceáladh an Content-Range, agus cuireann sé cosc ar mheascán leaganacha trí If-Range agus bailíochtóirí. Gach rud eile is gné “féachann sé tapa” í a íosfaidh do chuid ama níos déanaí, toisc go mbíonn earráidí ann go hannamh agus go mbíonn siad deacair a athchruthú.

Má tá tú ag iarraidh píblíne íoslódála chobhsaí a shocrú go soiléir do Updater, Importstrecken nó Services (Resume, Logging, Partial-File-Strategie, Betriebskanten), is minic is féidir é a réiteach i ngearr-seic ailtireachta — lena n-áirítear an cheist an bhfuil an casta sin fiúntach i do chomhthéacs. Déan teagmháil agus pléigh an tionscadal le Net-Base.

Foinseanna agus faisnéis bhreise

Cuireadh na héilimh theicniúla lárnacha seo i gcomhthéacs eagarthóireachta bunaithe ar na foinsí seachtracha seo a leanas.

  1. RFC 9110: HTTP Semantics (www.rfc-editor.org)
    Tá HTTP Range-Requests roghnach; is féidir le freastalaí Range a neamhaird agus freagra a thabhairt cosúil le GET gnáthúil, dá bharr ní mór don chliant an cód stádais agus na Header a mheas in ionad cur leis go dall.
  2. HTTP range requests – HTTP | MDN (developer.mozilla.org)
    Is comhartha é Accept-Ranges maidir le tacaíocht Range, ach caithfidh cliaint an iompar freagra (206/Content-Range) a sheiceáil go láidir.
  3. RangeHeaderValue Class (System.Net.Http.Headers) | Microsoft Learn (learn.microsoft.com)
    .NET soláthraíonn RangeHeaderValue mar léiriú tipitheach ar an Range-Header; ní gá do fhreastalaithe tacaíocht a thabhairt do Range-Requests.

Pléigh tionscadal nó tionscnamh nuachóirithe le Net-Base.

Céim eile

Nuair a éiríonn an téama ina thionscadal iarbhír, ba cheart ailtireacht, maoin reatha agus oibríocht a mheas le chéile go luath.

Ní hamháin go dtacaímid le ceisteanna aonair, ach freisin nuair is gá ó shlisíní cód foinse, ó ábhair legacy nó ó smaointe portail tionscadal corparáideach iontaofa a fhorbairt.

  • Measúnítear an staid reatha, an stát sprioc agus na rioscaí teicniúla le chéile.
  • REST, rochtain ar shonraí, portaill agus Rollout, ní chuirfear iad siar mar iarmhairtí déanacha.
  • Feicfidh sibh go luath cén bealach atá eacnamaíoch agus ó thaobh oibríochta inbhuanaithe.

Roinn an post

Roinn an t-alt seo go díreach

Tá LinkedIn, X, XING, Facebook, WhatsApp agus ríomhphost ar fáil láithreach. Maidir le Instagram, táimid ag ullmhú an nasca agus téacs gairid láithreach.

Ríomhphost

Osclaítear Instagram i gcluaisín nua. Cóipeáiltear an nasc agus an téacs gairid roimh ré isteach sa ghearrthaisce.

Scríobh trácht

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert