影片與字幕·直接媒體下載器
為什麼 CORS 可以阻止瀏覽器中的直接下載,以及這意味著什麼
· 工作原理
科爾斯 http 下載
僅瀏覽器下載程式位於同源策略內。這篇文章解釋了什麼是 CORS,為什麼有些主機允許取得而其他主機不允許,以及為什麼沒有中繼伺服器的工具無法解決它。
此連結在新分頁中有效,但在工具中失敗 - CORS 錯誤給使用者帶來的難題
在網址列中輸入播客附件時可能會播放,但當頁面嘗試使用 Fetch 讀取它時會失敗。導航和腳本閱讀是不同的瀏覽器功能。第一個顯示資源;第二個可以將其位元組暴露給在另一個來源上執行的程式碼。
Direct Media Downloader 需要第二種能力,因為它讀取回應區塊、報告進度、建立 Blob 並提供命名保存。當媒體主機未選擇跨網域讀取時,瀏覽器會阻止 JavaScript 接收回應,即使普通導航可能仍然有效。同樣的差異解釋了為什麼將位址複製到另一個應用程式可以產生不同的結果,而兩個應用程式都沒有更改遠端檔案。
一段中的同源策略 - 為什麼 toolacre.com 上的頁面無法自由讀取從另一個來源提供的位元組
來源組合了方案、主機名稱和連接埠。因此,由 ToolAcre 提供的頁面和由發布者 CDN 提供的檔案通常具有不同的來源。同源策略可防止一個來源的腳本自由讀取另一個來源的回應,從而保護透過環境瀏覽器存取暴露的資料。
此限制是由瀏覽器強制執行的,而不是由下載器中發明的警告強制執行的。它在應用程式程式碼可以檢查受保護的標頭或主體區塊之前應用。來源主機可能仍會收到請求,因此阻止讀取絕不能被描述為「未聯絡任何內容」。原始邊界適用於可讀回應,而不僅僅是檔案副檔名,因此明顯的 `.mp3` 後綴不會為頁面腳本授予特殊豁免。
Access-Control-Allow-Origin 的作用 — 檔案的主機(而非工具)如何決定瀏覽器是否可以移交位元組
遠端伺服器可以透過傳回適當的 `Access-Control-Allow-Origin` 標頭來選擇加入。該決定屬於檔案主機的配置。 ToolAcre 無法將標頭新增至其他人的回應中,且請求選項無法授予接收伺服器保留的權限。
寬鬆的標頭允許瀏覽器公開對頁面的回應;它不證明版權、安全性或媒體品質。同樣,缺少標頭並不能證明 URL 已損壞。這僅意味著該跨域腳本缺乏讀取伺服器返回內容的權限。主機管理員應該測試他們打算支援的確切請求來源和方法,而不是盲目地將許可標頭添加到整個儲存命名空間。
阻止跨源讀取以及腳本為何沒有收到可保存的回應
下載程式使用普通的 CORS 模式 Fetch 而不是 `no-cors`。在拒絕跨來源讀取時,Fetch 會拒絕,並應用程式程式碼既不會收到可用的標頭,也不會收到正文。此工具報告組合的 `CORS_OR_NETWORK` 類別,因為瀏覽器故意不透露足夠的詳細資訊來區分 CORS 和每次傳輸故障。
不透明回應屬於明確 `no-cors` 請求,但此模式無法解決此任務:JavaScript 無法檢查不透明主體並將其轉換為預期的 Blob。因此,實現會誠實地失敗,而不是獲取不可讀的回應並假裝它可以保存它。由於應用程式永遠不會取得這些隱藏字節,因此它無法真實計算進度、從受保護的標頭推斷檔案名稱或從中建立有用的物件 URL。
工作範例:在網路面板中讀取失敗的請求 - 發現遺失的標頭並確認沒有聯繫中繼伺服器
開啟「網路」面板,保留日誌,然後按一次「檢查連結」。嘗試的 HEAD 行標識目標並可能顯示瀏覽器的 CORS 診斷。檢查回應標頭(如果可用);缺少允許標頭解釋了為什麼頁面代碼沒有收到廣告的大小或 MIME 類型。
失敗的檢查已經證明嘗試了真正的請求。沒有攜帶貼上的 URL 的 ToolAcre API 行,也沒有第二個中繼請求。如果主機不太允許 HEAD,下載的行為可能仍會有所不同,因為它使用 GET,但兩條路徑都不會默默地切換體系結構。控制台措辭因瀏覽器而異,因此請保留失敗的行和標題證據,而不是依賴某個供應商的操作報告措辭。
為什麼該工具不繞過它進行路由 - 代理意味著將您的連結發送到伺服器,而這正是該工具承諾不會做的事情
代理程式可以在伺服器端取得檔案並從同源端點傳回它,從而避免瀏覽器的跨來源讀取。它還會向該操作員公開連結和每個中繼字節,產生頻寬,並建立任意獲取表面。 ToolAcre 故意沒有這樣的端點。
介面建議的後備方案是瀏覽器的本機「另存為」操作連結(如果可用)。這是導航或下載處理而不是頁面腳本讀取。此建議不會削弱主機策略、驗證訪客身分或將受保護的串流轉換為直接檔案。這種架構上的拒絕還可以防止 ToolAcre 累積副本、存取日誌或出站獲取權限,而只是為了將瀏覽器拒絕變成明顯的成功。
這不包含什麼 — CORS 與 403、登入牆或過期的簽章 URL 不同
CORS 故障不是 HTTP 403,儘管兩者都可以停止工作流程。 403 是主機選擇的回應狀態;過期的簽章可能會導致這種情況。登入牆需要此工具忽略的憑證。網路中斷、DNS 故障和憑證問題都可能導致瀏覽器普遍拒絕 Fetch。
因此,診斷應該同時使用網路和控制檯面板,而不是將每個故障視為遺失的標頭。當可讀回應到達時,ToolAcre 會報告已知的 HTTP 狀態,但它拒絕猜測瀏覽器何時僅提供傳輸型異常。將這些類別分開可以指導正確的補救措施:為授權的公共物件配置 CORS、刷新過期的連結、透過提供者登入或修復連線。
重點:CORS 是主機端決定 — Direct Media Downloader 如何誠實地報告它,而不是默默地回退到伺服器
CORS 在媒體主機上控制。僅限瀏覽器的下載程式可以服從該選擇,對其進行解釋,然後停止;它不能覆蓋客戶端程式碼的選擇。這個邊界之所以不方便,正是因為它阻止了任意頁面成為通用的跨站點閱讀器。
使用主機提供的下載控件,請求啟用 CORS 的授權檔案,或在適當時使用本機儲存連結。 Direct Media Downloader 透過揭露拒絕並保留直接瀏覽器到主機的路徑來履行其承諾,而不是透過將伺服器隱藏在更成功的按鈕後面。因此,成功的結果必須來自合作主機或不同的合法瀏覽器設施,而不是來自抑制錯誤文字同時保留相同的拒絕讀取。