Princippet om breakpoint-fortsættelse er meget enkelt, det vil sige, at headeren på HTTP-anmodningen og svarbeskeden er forskellig fra den normale download. Når man anmoder om et dokument på en server på normal vis, er den anmodning, der laves, og den modtagne server som følger:
Anmodningsoverskrift:
Cache-Control: no-cache
Connection: close
Pragma: no-cache
Accept: */*
Host: localhost Svar-header:
200
Content-Type: application/octet-stream
Content-Disposition: attachment;FileName=time.pdf Når serveren understøtter genoptagelse af breakpoint, er anmodningen og svaret som følger:
Anmodningsoverskrift:
Cache-Control: no-cache
Connection: close
Pragma: no-cache
Accept: */*
Host: localhost
Range: bytes=15360- Svar-header:
206
Content-Type: application/octet-stream
Content-Disposition: attachment;FileName=time.pdf De forskellige dele af de to beskeder er markeret med røde sektioner. Den kan ses: Range-headeren bruges til at identificere kundens ønskede downloadlokation. Når serverens svarnummer er 200, betyder det, at downloadet starter fra filheaderen, og 206 betyder, at overførslen starter fra en bestemt placering af filen. Med andre ord, når man understøtter breakpoint-genoptagelse, kan man begynde at downloade fra enhver del af filen, mens den normale måde kun kan downloade fra filheaderen. For at serveren kan understøtte breakpoint genoptages, skal følgende problemer løses:
1。 Hvis det er en genoptagelsesanmodning, skal du skaffe det filområde, klienten kræver. Som du kan se fra ovenstående analyse, når klienten sender et breakpoint, tilføjes Range-feltet til pakkeheaderen, og du kan afgøre, om det er en breakpoint-transmissionsanmodning som følger. strengområde = anmodning. Headers["Range"]; bool isResume = streng. IsNullOrEmpty(område);
2。 Svar korrekt til klienten for at informere klientserveren om, at endpointet understøttes til fortsættelse Når man sender en anmodning om et breakpoint, kan det tilsvarende tal for klienten sættes som følger: svar. Statuskode = 206;
3。 Lever det rigtige indhold, som kunden har brug for Levering af det korrekte indhold, som kunden kræver, indebærer som regel følgende trin Få klientens filanmodningsområde ved at analysere området. Når et brudpunkt sendes, er den krævede længde kortere end filens længde, så det korrekte svar skal sættes. ContentLength64 ejendom. Overfør det nødvendige indhold korrekt Kodeeksempel:
|