Prinsippet for fortsettelse av breakpoint er veldig enkelt, det vil si at headeren i HTTP-forespørselen og svarmeldingen er forskjellig fra den vanlige nedlastingen. Når man forespør et dokument på en server på vanlig måte, er forespørselen og serveren som mottas som følger:
Forespørselsoverskrift:
Cache-Control: no-cache
Connection: close
Pragma: no-cache
Accept: */*
Host: localhost Svarheader:
200
Content-Type: application/octet-stream
Content-Disposition: attachment;FileName=time.pdf Når serveren støtter gjenopptakelse av breakpoint, er forespørselen og svaret som følger:
Forespørselsoverskrift:
Cache-Control: no-cache
Connection: close
Pragma: no-cache
Accept: */*
Host: localhost
Range: bytes=15360- Svarheader:
206
Content-Type: application/octet-stream
Content-Disposition: attachment;FileName=time.pdf De ulike delene av de to meldingene er merket med røde seksjoner. Den kan sees: Range-headeren brukes til å identifisere kundens ønskede nedlastingssted. Når serverens svarnummer er 200, betyr det at nedlastingen starter fra filhodet, og 206 betyr at overføringen starter fra et bestemt sted i filen. Med andre ord, når du støtter breakpoint reresume, kan du begynne å laste ned fra hvilken som helst del av filen, mens den vanlige måten kun kan laste ned fra filheaderen. For å få serveren til å støtte breakpoint igjen, må følgende problemer løses:
1。 Hvis det er en gjenopptakelsesforespørsel, må du skaffe filområdet som klienten krever. Som du kan se fra analysen ovenfor, når klienten sender et breakpoint, legges Range-feltet til pakkeheaderen, og du kan avgjøre om det er en breakpoint-overføringsforespørsel som følger. strengrekkevidde = forespørsel. Headers["Range"]; bool isResume = streng. IsNullOrEmpty(område);
2。 Svar korrekt til klienten for å varsle klientserveren om at endepunktet støttes for fortsettelse Når man sender en forespørsel om et breakpoint, kan det tilsvarende nummeret for klienten settes som følger: respons. Statuskode = 206;
3。 Levere det riktige innholdet kunden trenger Å levere det riktige innholdet kunden krever, innebærer vanligvis følgende steg Få tak i klientens filforespørselsområde ved å analysere området. Når et breakpoint sendes, er den nødvendige lengden kortere enn filens lengde, så riktig respons må sattes. ContentLength64-egenskap. Overfør det nødvendige innholdet korrekt Kodeeksempel:
|