http下載原理

下載如何實現的斷點續傳

1.假設服務器域名爲www.test/down.zip,文件名爲down.zip。

2.請求報文

get /down.zip http/ 1.1
accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
excel, application/msword, application/vnd.ms-powerpoint, */*
accept-language: zh-cn
accept-encoding: gzip, deflate
user-agent: mozilla/ 4.0  (compatible; msie  5.01 ; windows nt  5.0 )
connection: keep-alive

3.服務器收到請求後,按要求尋找請求的文件,提取文件的信息,然後返回給瀏覽器,返回信息如下:

content-length= 106786028
accept-ranges=bytes
date=mon,  30  apr  2001  12 : 56 : 11  gmt
etag=w/ "02ca57e173c11:95b"
content-type=application/octet-stream
server=microsoft-iis/ 5.0
last-modified=mon,  30  apr  2001  12 : 56 : 11  gmt

4.下載過程中出現網絡中斷

  • 當用戶希望恢復下載時,客戶端向服務器發送帶有 Range 頭部的 HTTP 請求。
  • Range 頭部指定了客戶端希望從哪個字節開始繼續下載。通常格式爲 "Range: bytes=start-end",其中 start 表示起始字節位置,end 表示結束字節位置。如果 end 未指定,表示從 start 到文件末尾的所有內容。
  • 例如,Range 頭部可以是 "Range: bytes=5000-",表示從文件的第 5001 個字節(從 0 開始計數)開始繼續下載。
get /down.zip http/ 1.0
user-agent: netfox
range: bytes= 5000 -
accept: text/html, image/gif, image/jpeg, *; q=. 2 , */*; q=. 2

5.服務器處理斷點續傳請求:

  • 服務器收到帶有 Range 頭部的請求後,會根據 Range 頭部指定的範圍,只返回該範圍內的文件內容。
  • 服務器響應的狀態碼通常爲 206 Partial Content,表示服務器成功處理了部分 GET 請求。
  • 服務器返回的響應中包含實際返回的文件內容以及其他相關信息。
HTTP/1.1 206 Partial Content
Date: Mon, 22 Feb 2024 12:00:00 GMT
Server: Apache
Last-Modified: Sun, 21 Feb 2024 12:00:00 GMT
Content-Length: 10000
Content-Range: bytes 5000-14999/20000
Content-Type: application/octet-stream

[文件內容,從第5001個字節到第15000個字節]

 

6.客戶端繼續下載

  • 客戶端接收到服務器的響應後,將繼續從斷點處開始接收文件內容,並將其寫入本地文件。
  • 客戶端會持續接收直到文件下載完成或者再次中斷。

注針對瀏覽器默認實現了現在的斷點續傳,下載帶上了range 分段獲取 ,如果使用java代碼或者c++下載要實現此功能就要按照http協議按照以上流程實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章