我需要快速下載一個大文件,但是我能找到的所有資源都會限制帶寬。他們每個人似乎都支持HTTP 1.1字節服務(範圍請求),因爲我可以暫停並恢復下載。我怎樣才能從多個來源並行下載它?如何通過HTTP從多個位置下載單個文件?
回答
假設這是一個編程問題(鑑於這是StackOverflow),我將解釋如何鏈接到下載加速器,而不是利用這一點。
在服務器方面需要做什麼?
- 支持
Range
HTTP標頭的服務器。 - 允許併發連接的服務器。可以支持
Range
,同時不允許通過使用端點或基於IP的限制服務器端的多個同時連接。出於這個原因,我建議您設置一個簡單的測試服務器,而不是從文件共享站點下載,同時測試它。
什麼是Range
標題?
如果未設置Range
標頭,則通過HTTP傳輸的數據按從文件開始的順序發送。服務器上文件的第一個字節將是HTTP響應的第一個字節,服務器上文件的最後一個字節將是HTTP響應的最後一個字節。 Range
頭允許您指定字節開始發送的位置,允許您「跳過」響應的開頭。
實際回答實施例
我們的情況
的響應是純文本。響應內容只是一個單詞「StackOverflow !!」編碼ASCII,意思是每個字符是一個字節。因此,Content-Length
標頭的值是15 octets(字節的另一項)。
我們打算使用3個請求下載此文件。爲了這個例子,我們會說它會快3倍,但你應該認識到,這種方法會使下載速度變得很慢,非常小的文件。這是因爲HTTP頭必須與每個請求一起發送以及3次握手。我們還假定服務器支持HEAD請求,並且頭文件會隨下載響應一起發送。最後,由於HEAD請求的原因,此請求將使用GET執行。但是,POST有解決方法。
多汁詳細
首先,執行一個HTTP HEAD請求。取「Content-Length」標題並將該值除以您希望創建的並行連接數量。對於這個例子,Content-Length
是15,我們希望做3個連接,所以劃分的值將是5.
現在執行你希望並行預處理的請求數量。對於每個請求,將Range
標題設置爲「範圍:字節=」,按照上面找到的除以多少個請求的次數來執行。然後追加「 - 」,然後加上剛剛確定的值加上除數值。 對於這個例子,每個請求都應該設置標題如下。
Range: bytes=0-5
Range: bytes=5-10
Range: bytes=10-15
每個這些請求的響應應該是
- 堆棧
- Overf
- 低!
本質上,我們只是符合Range規範(section 3.12 of RFC 2616)以及Byte Range規範(RFC 2616的14.35節)。
最後,追加每個請求的字節以形成最終的響應數據。
免責聲明:我從未試過,但它應該在理論上
工作,我不能說,如果wget
是能夠把一個文件再度合作,如果獲取的來自多個來源。
以下示例顯示如何使用aria2c
執行此操作。
你將建立一個下載描述文件,然後傳遞到唱腔,像這樣:
aria2c -i uri.txt --split=5 --min-split-size=1M --max-connection-per-server=5
其中uri.txt
可能包含
http://a.com/file1.iso http://mirror-1.com/file1.iso http://mirror-2.com/file1.iso
dir=/downloads
out=file1.iso
這將獲取相同的文件,從3個不同位置並將其放入名稱爲file1.iso(out)的下載文件夾(dir)中。
- 1. 如何通過多線程的概念下載單個文件
- 2. 通過HTTP從Gerrit下載文件夾
- 3. 通過ASP下載多個文件
- 4. 通過FireFox下載多個文件
- 5. 通過單個動作下載多個文件
- 6. 如何從單個超鏈接下載多個文件
- 7. 如何正確地通過python-urllib2通過HTTP下載文件?
- 8. 如何在1個http請求下上載多個文件
- 9. 如何使用Python 2.7多線程(異步下載)通過Http下載文件
- 10. 使用進度條從遠程位置下載多個文件
- 11. 單擊 - 通過FTP下載時出錯(多個壓縮文件)
- 12. 從URL通過宏下載文件,並將其保存在一個位置
- 13. 通過http-auth下載文件
- 14. 通過Net :: HTTP下載壓縮文件
- 15. 下載從http位置的文件,我得到以下錯誤
- 16. 如何自動從不同位置下載多個PDF文件(AppleScript或JavaScript)
- 17. 如何從多個網址下載多個文件NSOperationQueue
- 18. 通過http登錄並下載一個xml文件?
- 19. 如何從codeigniter中的單個表單上載多個文件
- 20. 如何通過單擊進行多個圖像下載
- 21. 如何將多個鏈接下載到單個文件中?
- 22. 如何打開多個連接來下載單個文件?
- 23. 如何從http URL下載文件
- 24. 如何從http鏈接下載文件
- 25. 下載n個字節從HTTP文件的x位置開始在VBScript中
- 26. 如何通過一個獨特的PHP文件下載多個圖像?
- 27. 通過iPhone從單個來源多次下載線程
- 28. 廚師 - 下載從網站多個zip文件(HTTP)和做
- 29. 使用webclient從http下載多個文件
- 30. 通過http加載文件
如果服務器確實支持範圍請求,這絕對是不正確的!您當然可以同時下載文件的多個部分,有時它可以真正提高吞吐量。許多下載管理員都這樣做。 – AriX
@AriX我14歲的時候寫過那封信,請看我修改後的答案,並根據需要進行編輯。 –
哈哈看起來不錯,我只是想添加一個評論,以確保人們沒有看到它,並認爲這是正確的答案,但很好的工作。 – AriX