Node.js中實現HTTP 206內容分區(1)

來源:互聯網
上載者:User

Node.js中實現HTTP 206內容分區(1)

  • 下載 PartialContent.zip - 2 KB

介紹

在本文中,我會闡述HTTP狀態206 分部分內容 的基礎概念,並使用Node.js一步步地實現它. 我們還將用一個基於它用法最常見情境的樣本來測試代碼:一個能夠在任何時間點開始播放視頻檔案的HTML5頁面. 

Partial Content 的簡要介紹

HTTP 的 206 Partial Content 狀態代碼和其相關的訊息頭提供了讓瀏覽器以及其他使用者代理程式從伺服器接收部分內容而不是全部內容,這樣一種機制. 這一機制被廣泛使用在一個被大多數瀏覽器和諸如Windows Media Player和VLC Player這樣的播放器所可使用視訊檔案的傳輸上.

基礎的流程可以用下面這幾步描述:

讓我們來看看這幾個步驟中的每一個關鍵訊息頭.

Accept-Ranges: 位元組bytes)

這是會有伺服器發送的位元組頭,展示可以被分部分發送給瀏覽器的內容. 這個值聲明了可被接受的每一個範圍請求, 大多數情況下是位元組數 bytes

Range: 位元組數bytes)=(開始)-(結束)

這是瀏覽器告知伺服器所需分部分內容約制的訊息頭. 注意開始和結束位置是都包括在內的,而且是從0開始的. 這個訊息頭也可以不發送兩個位置,其含義如下: 

  • 如果結束位置被去掉了,伺服器會返回從聲明的開始位置到整個內容的結束位置內容的最後一個可用位元組.

  • 如果開始位置被去掉了,結束位置參數可以被描述成從最後一個可用的位元組算起可以被伺服器返回的位元組數.

Content-Range:位元組數bytes)=(開始)-(結束)/(總數)

這個訊息頭將會跟隨 HTTP 狀態代碼 206 一起出現. 開始和結束的值展示了當前內容的範圍. 跟 Range 訊息頭一樣, 兩個值都是包含在內的,並且也是從零開始的. 總數這個值聲明了可用位元組的總數.

Content-Range: */(總數)

這個頭資訊和上面一個是一樣的,不過是用另一種格式,並且僅在返回HTTP狀態代碼416時被發送。其中總數代表了本文總共可用的位元組數。

這裡有一對有2048個位元組檔案的例子。注意省略起點和重點的區別。

請求開始的1024個位元組

瀏覽器發送:

 
  1. GET /dota2/techies.mp4 HTTP/1.1  
  2. Host: localhost:8000  
  3. Range: bytes=0-1023 

伺服器返回:

 
  1. HTTP/1.1 216 Partial Content  
  2. Date: Mon, 15 Sep 2014 22:19:34 GMT  
  3. Content-Type: video/mp4  
  4. Content-Range: bytes 0-1023/2048  
  5. Content-Length: 1024  
  6.    
  7. (Content...) 

沒有終點位置的請求

瀏覽器發送:

 
  1. GET /dota2/techies.mp4 HTTP/1.1  
  2. Host: localhost:8000  
  3. Range: bytes=1024- 

伺服器返回:

 
  1. HTTP/1.1 216 Partial Content  
  2. Date: Mon, 15 Sep 2014 22:19:34 GMT  
  3. Content-Type: video/mp4  
  4. Content-Range: bytes 1024-2047/2048  
  5. Content-Length: 1024  
  6.    
  7. (Content...) 

注意:伺服器並不需要在單個響應中返回所有剩下的位元組,特別是當本文太長或者有其他效能的考慮。所以下面的兩個例子在這種情況下也是可接受的:

 
  1. Content-Range: bytes 1024-1535/2048  
  2. Content-Length: 512 

伺服器僅返回剩餘本文的一半。下一次請求的範圍將從第1536個位元組開始。

 
  1. Content-Range: bytes 1024-1279/2048  
  2. Content-Length: 256 

伺服器僅返回剩餘本文的256個位元組。下一次請求的範圍將從第1280個位元組開始。

伺服器返回:

 
  1. HTTP/1.1 216 Partial Content  
  2. Date: Mon, 15 Sep 2014 22:19:34 GMT  
  3. Content-Type: video/mp4  
  4. Content-Range: bytes 1536-2047/2048  
  5. Content-Length: 512  
  6.    
  7. (Content...) 

請求停用範圍:

瀏覽器發送:

 
  1. GET /dota2/techies.mp4 HTTP/1.1  
  2. Host: localhost:8000  
  3. Range: bytes=1024-4096 

伺服器返回:

 
  1. HTTP/1.1 416 Requested Range Not Satisfiable  
  2. Date: Mon, 15 Sep 2014 22:19:34 GMT  
  3. Content-Range: bytes */2048 

理解了工作流程和頭部資訊後,現在我們可以用Node.js去實現這個機制。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.