影片與字幕·直接媒體下載器
重定向、內容長度和第一位元組:直接下載的生命週期
· 工作原理
http 下載 開發人員工作流程
從下載開始到第一個字節到達,几個 HTTP 步骤在無形中發生。這篇文章解釋了重定向、回應標頭以及 fetch 如何報告它們,以及這對於預先命名其主機的工具意味著什麼。
下載開始,五秒钟內没有任何反應 - 單击和第一個字節之間的隐形步骤
按下「下載」後安靜的五秒鐘可以包含連線設定、重新導向、伺服器授權檢查以及在正文區塊可用之前等待回應標頭。进度条在字節到達之前無法前进,因此第一次更新之前的延迟不會自動冻結界面。
當主機允許跨網域標頭讀取時,可選的 Check 連結可以透過 HEAD 公開狀態、內容類型、內容長度和位元組範圍支援。這是一個單獨的請求,而不是保證加速後續 GET 的預熱,因為兩個呼叫都使用 `cache: no-store`。具有時間細分的追蹤比按感覺等待更有用,因為它分離了瀏覽器公開的排隊、連接、伺服器等待和正文下載階段。
請求行和標頭:瀏覽器發送的內容 — 方法、路徑、Accept 以及跨站點取得預設保留的內容
下載對经過驗證的 HTTPS URL 使用 GET。取得並瀏覽器建構實際的請求標頭;應用程式程式碼明確省略憑證並抑制引薦來源網址。它不會欺骗用戶代理或引用者、附加登錄 cookie 或添加平台令牌。
跨網站請求仍然可以包含瀏覽器控制的上下文,例如 Origin。確切的標頭因瀏覽器和環境而異,因此 DevTools 是特定運行的證據。來源證明了配置的方法、憑證模式、引用策略、快取模式、重定向策略和中止訊號。 HTTP 回應中標頭的存在是可選的,且 CORS 可以限制腳本可見性,因此缺少顯示的總數並不表示檔案為空。
重新導向:當您指定的主機將您交給另一個主機 - fetch 如何遵循 301、302 和 307 回應以及 response.url 如何顯示最終位址
HEAD 和 GET 都指定 `redirect: follow`。因此,301、302、307 或其他受支援的重新導向可以將要求從已發佈的初始 URL 移至最終資源。只有當鏈達到回應或根據瀏覽器策略失敗時,Fetch 才會解析。
下載程序不會顯示 `response.url`,即使 Fetch 響應公開了最終地址。若要審核躍點,請保留網路日誌並檢查其中的重定向行。這很重要,因為聯系前公告會列出所提供的主持人;它無法宣布服務器稍後選擇的位置。對於 307 風格的保存,方法語意與常見的重寫行為不同,這是信任瀏覽器追蹤而不是將每個躍點總結為相同的另一個原因。
Content-Length 和 Content-Type:回應標頭承諾的內容 — 在正文完成之前如何知道大小和類型
Content-Type 標記回應並成為 Blob 類型,而正的有限 Content-Length 提供預期的總數。 GET 路径在流式传輸之前拒绝超出 2 GiB 的宣告总數。如果標頭遺失,進度仍然不確定,實際接收的位元組會強制執行防護。
標頭是來自伺服器的語句,不保證正文將完成或與其標籤相符。連接可能會提前關閉,並且應用程式可能會錯誤配置 MIME 元資料。 ToolAcre 使用這些值進行描述、進度和命名決策,但不聲稱它們驗證媒體內部結構。該程式碼還根據其最大值重新檢查累積字節,確保缺失或不準確的長度不會停用應用程式的記憶體邊界。
工作範例:透過連結縮短器反彈的「直接」連結 - 讀取網路面板中的每一跳
對于縮短的允許連結,请打開 DevTools,启用“保留日志”,然後從“檢查連結”或“下載”開始。展開初始行以查看其重定向狀態和暴露時的位置,然後沿著鏈找到其正文提供該檔案的回應。將每個主機名稱與預期的發布者基礎架構進行比較。
第一位元組時序列將等待與傳輸分開。一旦區塊到達,ToolAcre 就會報告累積的位元組數;使用 Content-Length 它可以計算分數。较晚的第一個字節後跟一個快速主體表明與立即響應後跟缓慢持續传輸不同的瓶颈。重試之間的比較應保持快取設定和網路條件一致;否則,更改的時序設定檔可能會描述測試設定而不是起源。
為什麼重定向對於已公佈的主機很重要 - 該工具會公佈您提供的 URL;重定向可以通往其他地方,網絡面板顯示位置
宣布提交的主機名稱很有用,但在允許重定向時不一定完整。受信任的縮短器可以合法地指向存儲 CDN,而意外的链可以跨組织。该接口不會預先解析该链,因為這樣做本身就需要聯系。
需要白名單的審查者應驗證每個觀察到的主機名稱或完全避免縮短連結。 ToolAcre 會阻止提交的 URL 中明顯的私有目標,但它不會聲稱重新驗證應用程式程式碼中的每個重定向目標;瀏覽器網路保護仍然是另一層。最終的 CDN 可以具有與縮短程序不同的隱私權政策和管轄權,因此目的地審查應超出提交連結中可見的品牌。
這不包括範圍請求、恢復或使用分塊編碼且無長度的流式傳輸的伺服器
此工作流程不會傳送範圍請求、恢復中斷的位元組、強制內容長度或將分塊傳輸訊框重新解釋為已知總數。 HEAD 可以報告 `Accept-Ranges: bytes`,但目前下載仍然執行一次普通 GET 並從頭開始累積回應。
它也不會進行身份驗證。由於省略了 cookie,重定向到登入頁面可能會產生 HTML 或 HTTP 拒絕。將該頁面視為可下載媒體是錯誤的,因此事先的 MIME 警告和最終響應標頭的檢查是有用的保護措施。使用分塊或協定級幀的伺服器可以在沒有內容長度的情況下提供完整的正文,並 UI 正確地避免了將合法的不確定性變成零。
重點:了解您的躍點 — 如何同時使用直接媒體下載器和網路面板來查看實際聯繫的每個主機
直接連結描述了 HTTP 旅程的開始,不一定是一台物理服務器。可觀察的序列是初始 GET、任何後續的重定向、回應標頭、第一個正文區塊、後續區塊、Blob 建立以及完成後單獨的本機儲存操作。
當目的地來源很重要時,將 Direct Media Downloader 的初始主機公告與網路面板配對。這種組合顯示了聯繫之前的承諾以及聯繫之後實際發生的情況,而無需發明對可恢復傳輸、隱藏代理或重定向預測的支援。此時間順序也解釋了為什麼僅在完成後才出現保存:該實作不會公開部分組裝的 Blob,就好像它是經過驗證的完整回應一樣。