2014-06-20 61 views
4

我已將mp4視頻動畫上傳到Azure Blob存儲。除了將Content-Type設置爲video/mp4以外,標題都是默認的。該視頻可以訪問在http://paddingtondev.blob.core.windows.net/media/1001/animation_default_headers.mp4如何讓瀏覽器緩存來自Azure CDN的視頻響應?

我有一個Azure CDN坐在該blob存儲帳戶。通過CDN瀏覽同一視頻的URL是http://az593791.vo.msecnd.net/media/1001/animation_default_headers.mp4

當我通過網頁上的HTML5視頻元素訪問存儲blob的視頻時,瀏覽器(已在FF和Chrome中測試過)接收到200中的整個視頻HTTP響應。對該視頻的更多請求會接收來自blob存儲的304響應。

但是,當您通過Azure CDN請求視頻時,它會將其作爲一系列HTTP 206部分響應有用地返回給您。這是響應瀏覽器指定帶請求的Range標頭的。

但是,通過CDN進一步請求視頻不被緩存,並且整個視頻由瀏覽器重新下載(通過一系列進一步的206請求)。

如何確保視頻被緩存?我理解部分響應的有用性,但在我們的情況下,視頻不可搜索,我們只在整個文件被下載時播放。我可以在這裏看到一些辦法,但都沒有到目前爲止幫助:從返回部分反應

  1. 禁止不Azure的CDN從原來的瀏覽器請求
  2. 刪除範圍頭不知何故
  3. 說服瀏覽器緩存206個部分緩解

我已經嘗試在該文件中添加一個max-age Cache-Control標頭,但這沒有影響。理想情況下,我們甚至在重新加載視頻時都不會觸及Azure(因爲它永遠不會改變),但如果它隨後返回304,我很樂意接受Azure的HTTP請求的成本。

+1

+1發佈一個有趣的天藍色問題:) –

回答

1

緩存206個響應非常棘手。客戶端的RFC要求爲了緩存內容,ETAG和請求的範圍必須完全匹配。

有幾件事你可以檢查 - 1)確認ETAGS沒有改變請求。從您的環境描述(並設置內容到期日期),這聽起來不太可能,但它可能是一個追求的途徑。

2)更有可能是範圍請求沒有排隊。字節範圍1000 - > 2000的請求和1500 - > 2000的第二個請求不會從客戶端緩存中提供(根據RFC)。因此,您可能處於準確瞭解特定格式/客戶端應該發生的情況的情況。

我很確定HTML5只支持漸進式下載,所以除非你想重新考慮這個交付,這可能是預期的行爲。

+0

FWIW,我想補充一點,雖然使用[REDbot]檢查mp4 url​​頭(https://redbot.org/?uri=http%3A% 2F%2Fpaddingtondev.blob.core.windows.net%2Fmedia%2F1001%2Fanimation_default_headers.mp4)工具它報告:'ETag頭的語法無效,不符合其指定的語法' –

+0

似乎無論如何我這樣做,我無法讓Firefox,Edge或Chrome本地緩存任何206響應(還沒有嘗試過IE)。 ETAG和範圍請求都完美排列,但響應從未被緩存。互聯網上的任何地方都有一個可行的例子嗎?我的直覺似乎告訴我,瀏覽器不支持這一點。 –

相關問題