Member-only story

Range reqeusts 是啥

--

大約在二十年前,當時的電腦課我都在等老師教完他想教的,讓我們自由活動。這時大家都會湧入史萊姆好玩遊戲區去玩當時最熱門的小遊戲。像我就覺得養魚遊戲很好玩。有時候有個狀況是如果你的遊戲需要下載比較久,有時候會發生莫名其妙的中斷。下載到 99% 結果中斷的感覺,確實是有夠悲慘。

Range requests

如果把檔案分成小塊小塊的,每次請求一小塊,成功了之後再請求下一塊。一旦某個環節發生意外,下載中斷,我們都可以重新下載那塊就好,而不需要每次都下載整的檔案。這個原理可以幫助我們做到下載暫停或恢復的功能。

curl -vo test.mp4 'https://video-backup.lichi-chen.com/toyz/stanley.mp4' --header 'Range: bytes=0-2000'

舉例來講,上面這個指令就是請求這個 mp4 的前面 2000 bytes 。一個客戶端實作斷線下載暫停的做法,就是分成很多個 2000 bytes 去下載。一個下載 0–2000 ,接下來下載 2000–4000 ,依此類推。

Photo by Mae Mu on Unsplash

其他教學

如果你想用最短的時間內了解 range request 大概在幹麻。建議參考 MDN 的教學。如果你願意花費大量時間徹底瞭解,建議直接看 RFC 7233

你怎麼知道對面有支援 range request?

可以透過 Accept-Ranges 判斷。以下的內容有看到 accept-ranges: bytesresponse header ,就表示有支援。

--

--

Chen Li-Chi (陳立其)
Chen Li-Chi (陳立其)

Written by Chen Li-Chi (陳立其)

希望所有困難事都可以拆成簡單的事

No responses yet