2011-06-01 23 views
8

如果不支持Range,那麼對於具有標題字段的GET請求Range: bytes=278528-的正確響應是什麼?HTTP:當Range不受支持時,我應該如何回覆「Range:bytes =」?

讀取HTTP頭定義(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)我想我應該至少設置:Accept-Ranges: none,但它明確指出,

客戶可能產生字節範圍請求沒有收到這個頭所涉及的資源。

所以,如果一個客戶端請求的範圍,我應該:

+0

永恆的詛咒似乎有點嚴重。 – 2011-06-01 16:14:02

回答

7

您可以忽略它,正如規範所述。確切地說:

  • 如果您支持它,您將返回206 Partial Content的狀態代碼幷包含適當的標頭,如Content-Range。
  • 如果你不支持它,你會像平常一樣返回200 OK。

我還沒有測試過這個,但規格看起來很清楚。我已經看到了這項工作 - 如果服務器不支持Range標頭,使用wget或curl恢復中斷的下載將從頭開始正確重啓。

+2

客戶端也忽略了我忽略它。在LG /摩托羅拉手機(OMXPlayer)上的Android的MediaPlayer崩潰,如果你返回一個200全身:( – Joernsn 2011-06-01 19:31:31

0

忽略範圍請求可以使播放內容(這是巨大的)在播放服務或其他不穩定或不可接受的情況下播放。我知道http是不正確protokol傳輸視頻,但嘗試發送視頻播放服務器不接受範圍... Airplay使用範圍請求...

0

可能性是檢查http標頭,如果有是一個範圍字符串,解析它,解析範圍,計算跳過和取得位置,從url打開文件流,然後設法跳過並取'take'字節,設置響應,發送響應和最終關閉流。 不要忘記用範圍標題作出迴應

不要忽略範圍,絕不會在您處理大流時。

如果你正在使用nanohttp,我可以幫你出例如

相關問題