Member-only story
Range reqeusts 是啥
Feb 3, 2022
大約在二十年前,當時的電腦課我都在等老師教完他想教的,讓我們自由活動。這時大家都會湧入史萊姆好玩遊戲區去玩當時最熱門的小遊戲。像我就覺得養魚遊戲很好玩。有時候有個狀況是如果你的遊戲需要下載比較久,有時候會發生莫名其妙的中斷。下載到 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 ,依此類推。
其他教學
如果你想用最短的時間內了解 range request 大概在幹麻。建議參考 MDN 的教學。如果你願意花費大量時間徹底瞭解,建議直接看 RFC 7233 。
你怎麼知道對面有支援 range request?
可以透過 Accept-Ranges 判斷。以下的內容有看到 accept-ranges: bytes
response header ,就表示有支援。