實踐HTTP206狀態:部分內容和範圍請求

實踐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抓取到了資源的部分數據".這種請求通常用來:

  1. 學習http頭和狀態.
  2. 解決網路問題.
  3. 解決大文件下載問題.
  4. 解決CDN和原始HTTP服務器問題.
  5. 使用工具例如lftp,wget,telnet測試斷電續傳.
  6. 測試將一個大文件分割成多個部分同時下載.

查明遠程服務器是否支持HTTP 206

首先你需要知道文件大小以及遠程服務器是否支持HTTP 206請求.使用curl命令可以查看任意資源的HTTP頭,使用下面的curl命令可以發送一個HEAD請求:

$ curl -I http://s0.cyberciti.org/images/misc/static/2012/11/ifdata-welcome-0.png

輸出結果爲:

HTTP/1.0 200 OK
Content-Type: image/png
Content-Length: 36907
Connection: keep-alive
Server: nginx
Date: Wed, 07 Nov 2012 00:44:47 GMT
X-Whom: l3-com-cyber
Cache-Control: public, max-age=432000000
Expires: Fri, 17 Jul 2026 00:44:46 GMT
Accept-Ranges: bytes
ETag: "278099835"
Last-Modified: Mon, 05 Nov 2012 23:06:34 GMT
Age: 298127

其中有兩個我們比較關注的請求頭:

Accept-Ranges: bytes - 該響應頭表明服務器支持Range請求,以及服務器所支持的單位字節(這也是唯一可用的單位).我們還能知道:服務器支持斷點續傳,以及支持同時下載文件的多個部分,也就是說下載工具可以利用範圍請求加速下載該文件.Accept-Ranges:none響應頭表示服務器不支持範圍請求.

Content-Length: 36907Content-Length響應頭表明了響應實體的大小,也就是真實的圖片文件的大小是36907字節 (37K).

如何發送一個range請求頭?

現在,你知道了該圖片所在的服務器支持範圍請求,你需要發送一個包含Range請求頭的GET請求:

Range: bytes=0-1024

完整的請求數據應該是這樣的.首先第一行是:

GET /images/misc/static/2012/11/ifdata-welcome-0.png HTTP/1.1 

然後需要發送Host請求頭來指定請求資源所在的主機和端口號:

Host: s0.cyberciti.org

最後是要發送的Range請求頭,指定了你想要的字節範圍:

Range: bytes=0-1024 

使用telnet命令

telnet命令允許你使用Telnet協議來與遠程主機(服務器)進行通信.所有的類Unix操作系統以及MS-Windows都包含有Telnet客戶端.啓動Telnet客戶端並進入Telnet提示符,要執行命令:

telnet your-server-name-here www
telnet your-server-name-here 80

想要通過端口號80連接遠程服務器s0.cyberciti.org,輸入:

telnet s0.cyberciti.org 80 

輸出結果爲:

Trying 54.240.168.194...
Connected to d2m4hyssawyie7.cloudfront.net.
Escape character is '^]'.

在本例中,使用範圍請求(0-1024 字節)來請求s0.cyberciti.org上的/images/misc/static/2012/11/ifdata-welcome-0.png文件,輸入:

GET /images/misc/static/2012/11/ifdata-welcome-0.png HTTP/1.1
Host: s0.cyberciti.org
Range: bytes=0-1024

輸出結果爲:


上圖中,

  1. 區域1 - GET請求以及請求頭.
  2. 區域2 - 206狀態以及響應頭.
  3. 區域3 - 二進制數據.

使用curl命令

curl命令是一個和遠程服務器交換數據的工具.它支持HTTP/FTPSFTP/FILE協議上的範圍請求,在下例中,使用兩段範圍來請求遠程文件ifdata-welcome-0.png,然後使用cat命令將兩段數據合併成完整文件:

curl  --header "Range: bytes=0-20000" http://s0.cyberciti.org/images/misc/static/2012/11/ifdata-welcome-0.png -o part1
curl --header "Range: bytes=20001-36907" http://s0.cyberciti.org/images/misc/static/2012/11/ifdata-welcome-0.png -o part2
cat part1 part2 >> test1.png
gnome-open test1.png

還可以使用-r選項(可以同時添加-v選項查看請求頭和響應頭):

curl  -r 0-20000 http://s0.cyberciti.org/images/misc/static/2012/11/ifdata-welcome-0.png -o part1
curl -r 20001-36907 http://s0.cyberciti.org/images/misc/static/2012/11/ifdata-welcome-0.png -o part2
cat part1 part2 >> test2.png
gnome-open test2.png

如何開啓Accept-Ranges響應頭?

大部分web服務器都原生支持字節範圍請求. Apache 2.x用戶可以在httpd.conf中嘗試mod_headers:

Header set Accept-Ranges bytes

Lighttpd用戶嘗試在lighttpd.conf中進行下面的配置:

## enabled for all file types ##
server.range-requests = "enable"
## But, disable it for pdf files ##
$HTTP["url"] =~ "\.pdf$" {
server.range-requests = "disable"
}

不喜歡命令行?

你可以通過瀏覽器查看HTTP頭.嘗試下面的附加組件:

發佈了60 篇原創文章 · 獲贊 28 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章