[譯]實踐HTTP206狀態:部分內容和范圍請求
原文:http://www.cyberciti.biz/cloud-computing/http-status-code-206-commad-line-test/
HTTP 2xx范圍內的狀態碼表明了:"客戶端發送的請求已經被服務器接受並且被成功處理了".HTTP/1.1 200 OK是HTTP請求成功后的標准響應,當你在瀏覽器中打開www.cyberciti.biz后,你通常會得到一個200狀態碼.HTTP/1.1 206狀態碼表示的是:"客戶端通過發送范圍請求頭Range抓取到了資源的部分數據".這種請求通常用來:
- 學習http頭和狀態.
- 解決網路問題.
- 解決大文件下載問題.
- 解決CDN和原始HTTP服務器問題.
- 使用工具例如lftp,wget,telnet測試斷電續傳.
- 測試將一個大文件分割成多個部分同時下載.
查明遠程服務器是否支持HTTP 206
首先你需要知道文件大小以及遠程服務器是否支持HTTP 206請求.使用curl命令可以查看任意資源的HTTP頭,使用下面的curl命令可以發送一個HEAD請求:
輸出結果為:
其中有兩個我們比較關注的請求頭:
Accept-Ranges: bytes- 該響應頭表明服務器支持Range請求,以及服務器所支持的單位是字節(這也是唯一可用的單位).我們還能知道:服務器支持斷點續傳,以及支持同時下載文件的多個部分,也就是說下載工具可以利用范圍請求加速下載該文件.Accept-Ranges: none響應頭表示服務器不支持范圍請求.
Content-Length: 36907- Content-Length響應頭表明了響應實體的大小,也就是真實的圖片文件的大小是36907字節 (37K).
如何發送一個range請求頭?
現在,你知道了該圖片所在的服務器支持范圍請求,你需要發送一個包含Range請求頭的GET請求:
完整的請求數據應該是這樣的.首先第一行是:
然后需要發送Host請求頭來指定請求資源所在的主機和端口號:
最后是要發送的Range請求頭,指定了你想要的字節范圍:
使用telnet命令
telnet命令允許你使用Telnet協議來與遠程主機(服務器)進行通信.所有的類Unix操作系統以及MS-Windows都包含有Telnet客戶端.啟動Telnet客戶端並進入Telnet提示符,要執行命令:
想要通過端口號80連接遠程服務器s0.cyberciti.org,輸入:
輸出結果為:
在本例中,使用范圍請求(0-1024 字節)來請求s0.cyberciti.org上的/images/misc/static/2012/11/ifdata-welcome-0.png文件,輸入:
輸出結果為:

上圖中,
- 區域1 - GET請求以及請求頭.
- 區域2 - 206狀態以及響應頭.
- 區域3 - 二進制數據.
使用curl命令
curl命令是一個和遠程服務器交換數據的工具.它支持HTTP/FTPSFTP/FILE協議上的范圍請求,在下例中,使用兩段范圍來請求遠程文件ifdata-welcome-0.png,然后使用cat命令將兩段數據合並成完整文件:
還可以使用-r選項(可以同時添加-v選項查看請求頭和響應頭):
如何開啟Accept-Ranges響應頭?
大部分web服務器都原生支持字節范圍請求. Apache 2.x用戶可以在httpd.conf中嘗試mod_headers:
Lighttpd用戶嘗試在lighttpd.conf中進行下面的配置:
不喜歡命令行?
你可以通過瀏覽器查看HTTP頭.嘗試下面的附加組件:
- 下載 Firefox - live http header.
- 下載 Google Chrome - live http header.
- 指南: Apple Safari - developer tools to view HTTP header.
總結
本文討論了如何查看一個請求的HTTP頭和響應狀態.你可以利用范圍請求來分段下載一個大文件,如果指定的偏移量是有效的,則服務器會返回一個HTTP 206狀態碼.如果偏移量是無效的,則服務器會返回一個HTTP 416狀態碼 (請求范圍無法滿足).