|
|
Опубликовано 27.11.2019 10:42:41
|
|
|

Принцип продолжения точки остановки очень прост: заголовок HTTP-запроса и ответного сообщения отличается от обычного скачивания. При запросе документа на сервере обычным способом сделанный запрос и полученный сервер следующие:
Заголовок запроса:
Cache-Control: no-cache
Connection: close
Pragma: no-cache
Accept: */*
Host: localhost Заголовок ответа:
200
Content-Type: application/octet-stream
Content-Disposition: attachment;FileName=time.pdf Когда сервер поддерживает возобновление точки остановки, запрос и ответ выглядят следующим образом:
Заголовок запроса:
Cache-Control: no-cache
Connection: close
Pragma: no-cache
Accept: */*
Host: localhost
Range: bytes=15360- Заголовок ответа:
206
Content-Type: application/octet-stream
Content-Disposition: attachment;FileName=time.pdf Разные части двух сообщений отмечены красными секциями. Его можно увидеть: Заголовок Range используется для определения желаемого клиентом места загрузки. Когда номер ответа сервера равен 200, это означает, что загрузка начинается с заголовка файла, а 206 — передача из определённого места файла. Другими словами, при поддержке возобновления точки остановки можно начать скачивание с любой части файла, тогда как обычный способ — только из заголовка файла. Чтобы сервер поддерживал возобновление точки остановки, необходимо решить следующие проблемы:
1。 Если это запрос на возобновление, вам нужно получить необходимый клиенту диапазон файлов. Как видно из приведённого выше анализа, когда клиент передаёт точку остановки, поле Range добавляется в заголовок пакета, и можно определить, является ли это запросом на передачу точки остановки, следующим образом. диапазон строки = запрос. Headers["Range"]; bool isResume = строка. IsNullOrEmpty(диапазон);
2。 Правильно отвечайте клиенту, чтобы уведомить клиентский сервер, что конечная точка поддерживается для продолжения При отправке запроса на точку остановки соответствующее число для клиента можно установить следующим образом: Ответ. StatusCode = 206;
3。 Предоставляйте нужный клиенту нужный контент Предоставление нужного клиенту контента обычно включает следующие шаги Получите диапазон запроса на файл клиента, проанализируя этот диапазон. Когда отправляется точка остановки, требуемая длина короче длины файла, поэтому необходимо установить правильный ответ. свойство ContentLength64. Правильно переносите необходимый контент Пример кода:
|
Предыдущий:httplistener слушает, чтобы получить параметры запроса POSTСледующий:18 философских комиксов, все из которых — мастера
|