影片與字幕·直接媒體下載器
MIME 類型與內容類型:網路如何標記媒體檔案以供下載
· 背景
http 媒體 網路基礎知識
副檔名是一種檔案名稱約定; MIME 類型是伺服器告訴瀏覽器檔案是什麼的方式。這篇文章解釋了 MIME 類型的來源、Content-Type 如何塑造下載以及兩者不一致時會發生什麼。
該檔案名為 .mp4,但瀏覽器將其視為文字 - MIME 類型旨在防止這種不匹配
以 `.mp4` 結尾的路徑可以作為文字,而沒有後綴的路徑可以攜帶有效的視訊。副檔名屬於名稱; HTTP Content-Type 屬於回應元資料。
當 CORS 公開該標頭時,直接媒體下載器會在 HEAD 期間讀取該標頭,並再次從 GET 讀取該標頭。它顯示該值,將其用作 Blob 類型,並將媒體外觀值視為建議而不是封鎖憑證。因此,錯誤的標頭可能會在任何玩家檢查有效負載之前改變行為,特別是當回應以其他方式內聯顯示時。不準確的標籤可能會影響任何播放器檢查正文之前的處理,尤其是當瀏覽器以其他方式呈現內聯媒體時。
從電子郵件附件到 HTTP — MIME 類型如何開始作為標記電子郵件部分的一種方式並成為 Web 的檔案標記系統
MIME 最初是一個用來標記訊息部分的系統,後來成為 HTTP 用來表示的詞彙表。媒體類型具有頂級類型和子類型,可選地後跟參數。
標籤幫助瀏覽器選擇處理,但發送伺服器控制它。元資料較差的儲存桶可以在無用的通用值下提供正確的位元組。 HTTP 採用了註冊表,因為可互通的標籤更適合每個從檔案名稱或未記錄的位元組猜測中發明含義的客戶端。共用註冊用郵件和 Web 用戶端可以一致解釋的標籤取代了不相容的私有命名約定。
讀取 Content-Type 標頭 — 類型、子類型和參數,常見情況為 video/mp4, audio/mpeg 和 application/octet-stream
`video/mp4` 描述 MP4 媒體表示形式,`audio/mpeg` 描述 MPEG 音頻,`application/octet-stream` 是通用二進位標籤。字元集參數對於文字很常見,但不標識媒體編解碼器。
ToolAcre 保留完整的標頭字串。其 `looksLikeMedia` 公告可識別視訊、音訊和 MPEGURL 標籤;八位元組流會觸發警告,但不會自動拒絕。參數應根據媒體類型的規範進行解釋;它們的存在並不會將一種頂級類型轉換為另一種頂級類型。參數必須在適用的類型定義下讀取;他們的存在不會將二元回應改變為不同的頂級家族。
嗅探及其限制 - 為什麼瀏覽器有時會猜測以及為什麼猜測可能是錯誤的或故意禁用
當元資料遺失或不明確時,瀏覽器有時會檢查字節,但為了安全性和一致性,嗅探受到限制。伺服器可以停用某些猜測,並行為因上下文而異。
下載器沒有實作自己的簽章掃描器。它既不會打開容器,也不會在檢查編解碼器後覆蓋宣告的 MIME,因此請避免聲稱它更正了主機元資料。諸如 `X-Content-Type-Options: nosniff` 之類的安全標頭可以有意限制猜測,從而對準確的伺服器配置承擔更大的責任。 `nosniff` 回應可以有意減少猜測,使正確的來源元資料更加重要,而不是邀請客戶端修復。
擴充功能與 MIME 類型 — 播放器、作業系統和瀏覽器工具真正信任哪一個
播放器和作業系統可以以不同的順序考慮擴充功能、MIME、位元組簽章和可用編解碼器。沒有一個品牌能夠普遍贏得所有消費者的青睞。
ToolAcre 的後備檔案名稱僅在 Content-Disposition 和最終路徑段不存在時才使用 Content-Type。它可以識別 WebM 和 MP4;否則,通用名稱以 `.bin` 結尾。歸檔工作流程應該記錄這兩個標籤,因為分歧是診斷證據,而不是默默地用另一個標籤覆蓋的原因。當兩個值不一致時將其存檔,因為這種不匹配是有關交付配置的有用診斷證據。
工作範例:修正一個將所有內容作為八位元位元組流提供服務的儲存桶 - 下載和儲存的檔案發生了什麼變化
如果儲存桶將每個物件作為八位元組流提供服務,請在來源處更新元資料。然後,相同授權檔案可以在以後的請求中產生更清晰的探測行和正確類型的 Blob。
現有路徑或內容處置名稱可能保持不變,因為檔案名稱優先權是分開的。修復 MIME 標頭不會對位元組進行轉碼或修復其他地方已提供的誤導性擴充。在元資料傳播後重複請求並確認實際回應,因為更改儲存控制台欄位並不能證明每個 CDN 快取現在都提供服務。更改儲存桶元資料後,在快取傳播後驗證生產回應,而不是信任控制面板保存確認。
這不包括檔案內的容器和編解碼器,沒有標頭可以保證
Content-Type 無法保證容器有效性、編解碼器、持續時間、完整性、安全性或可玩性。伺服器可能會無意或故意撒謊,並傳輸可能會在承諾的長度之前結束。
使用可信任的檢查軟體來解決容器和編解碼器問題。下載器的工作以保存接收到的主體並公開其觀察到的伺服器標籤結束。校驗和和專門的探測可以增加對確切位元組的信心,但這兩者都不是由這個檔案保存介面實現的。校驗和和容器探測可以建立額外的事實,但這兩個功能都不屬於這個集中的下載器介面。因此,熟悉的標籤應該指導調查而不結束調查。
重點:標籤很重要 - 直接連結的內容類型如何影響直接媒體下載器保存的內容
標記形狀處理、警告和後備命名,因此即使它們不是證據,它們也很重要。將標頭、檔案名稱、已知來源、位元組數和回放作為單獨的證據進行比較。
Direct Media Downloader 將缺少的類型報告為“伺服器未宣告”,並避免發明一種超出 Blob 後備的類型。這種限制使得能夠修復主機的人可以看到錯誤配置。對於主機擁有者來說,在上傳時修正元資料有利於每個瀏覽器和用戶端,而不是要求每個訪客在下載後修復標籤。之後重新檢查交付的回應。