ビデオと字幕 · ダイレクト メディア ダウンローダー
ブラウザがフェッチと Blob を使用して直接リンクからファイルをダウンロードする方法
· 仕組み
ダウンロード ブラウザAPI コルス
ブラウザー ツールが直接リンクを保存ファイルに変換するために使用するパイプラインをたどります。つまり、バイトをフェッチし、Blob として保持し、ダウンロード属性に渡します。どの段階でもサーバーが必要ない理由を説明します。
リンクはファイルを保存する代わりにプレーヤーを開きます。MP4 または MP3 の直接リンクをクリックすると通常はインラインで再生されますが、これはダウンローダーが解決する問題です。
ブラウザはその MIME タイプの再生方法を認識しているため、直接 MP3 リンクをクリックするとプレーヤーが開く場合があります。同じバイトの保存は別のアクションです。キーワードは直接的です。プレーヤーやメディア セグメントをリストするマニフェストを含む Web ページではなく、実際のファイル応答へのリンクです。 ToolAcre は、ダウンロードを提供する前にこの区別を行い、ページ URL がファイル URL であるかのように見せません。
ステップ 1: fetch() はホストにバイトを要求します。通知されたホストへの GET リクエストはどのようなもので、何が返されるのかを確認します。
[リンクの確認] を選択すると、ブラウザは、ステータス、タイプ、および長さを検査するために、指定した URL に HEAD リクエストを発行する場合があります。ファイルの取得には、ToolAcre プロキシではなく、そのホストへの GET リクエストが使用されます。このリクエストでは意図的に認証情報が省略されているため、ログインを必要とするホストがリクエストを拒否する可能性があります。リモート サーバーは、クロスオリジン スクリプト読み取りも許可する必要があります。 CORS がアクセスをブロックした場合、ツールは隠れたリレーを介してアクセスを回避するのではなく、拒否を説明します。リダイレクトによって宛先が変更される可能性があるため、発表されたホストを確認してください。
ステップ 2: 応答本文が BLOB になる — バイトがメモリ内でどのように収集されるか、および BLOB が MIME タイプを伝送する理由
応答本文はバイト チャンクのストリームとして読み取られます。 Progress は、ホストが Content-Length を公開するときに使用できます。長さが不明な場合、ツールは受信バイト数を表示できますが、信頼できるパーセンテージは表示できません。チャンクの収集中にメモリの上限を強制し、返されたコンテンツ タイプで BLOB を組み立てます。これは、無制限のストリームで response.blob() を呼び出すより安全ですが、ディスクへのゼロメモリ ストリーミングではありません。完成した BLOB は依然としてブラウザ セッションの領域を占有します。
ステップ 3: URL.createObjectURL とダウンロード属性 — 一時 BLOB: URL とアンカーが保存ダイアログをトリガーする方法
BLOB はメモリ内のデータであり、インターネット アドレスではありません。ブラウザーは一時的な blob: オブジェクト URL を作成し、それをダウンロード ファイル名を持つアンカーに添付できます。そのアンカーをクリックすると、ブラウザにバイトを保存するように要求されます。ファイル名は、ページ タイトルではなく、Content-Disposition ヘッダーまたは URL パスから取得される場合があります。リンクは同じページの BLOB URL になっているため、ブラウザーは結果を ToolAcre でホストせずに保存できます。未知のソースからのファイルを開く前に、拡張子と MIME タイプを調べることが賢明です。
実用的な例: ポッドキャスト エピソードをエンクロージャ リンクから保存 — 貼り付けられた URL から 1 つの MP3 をディスク上のファイルにたどる
ポッドキャスト発行者が、episode.mp3 で終わる承認されたエンクロージャ URL を公開していると想像してください。その正確なアドレスを貼り付け、発表されたホストを調べて、「チェック」リンクを使用します。 HEAD が許可されている場合は、オーディオ/MPEG と予想されるバイト数が表示される場合があります。次に、Fetch はパブリッシャーに MP3 バイトを要求し、それらを Blob にストリーミングし、episode.mp3 を保存します。ホストが CORS ヘッダーを省略した場合、ブラウザは独自のタブでリンクを再生できますが、このページはスクリプトでリンクを取得できません。 「名前を付けてリンクを保存」が正しいルートである可能性があります。ファイルを保存するユーザーの権利は、サーバーがファイルの取得を技術的に許可するかどうかとは別のものです。
クリーンアップ: オブジェクト URL を取り消してメモリを解放する - 適切に構築されたダウンローダーが保存完了後に BLOB を解放する理由
一時オブジェクト URL は、そのバッキング BLOB への参照を保持します。すべての URL を有効なままにするダウンローダーは、大きなファイルを長期間有効なタブに保持できます。 ToolAcre の共有ダウンロード ユーティリティは、保存アクションのローカル URL を作成し、完了時にそれを取り消します。キャンセルすると、応答リーダーが解放され、部分的なチャンクが破棄されます。非常に大きなファイルの場合は、応答全体をページ メモリに収集するよりも、ホストからの通常のブラウザ ダウンロードの方が適しています。
これでカバーされないもの — ページ URL、ストリーミング マニフェスト、DRM、ログインが必要なリンク
このツールは、ビデオ ページの背後に隠されたメディアの検索、HLS/DASH .m3u8 または .mpd マニフェストの解析、DRM のバイパス、ヘッダーのスプーフィング、またはセッションで保護されたストリームへのアクセスを行いません。プライベート コンテンツをダウンロードしたり、ライセンスがファイルのコピーを許可するかどうかを決定したりすることはありません。 403、ログイン ページへのリダイレクト、または CORS エラーは理解すべき境界線であり、文書化されていないプロキシを検索するための手がかりではありません。
要点: 3 つのブラウザー API、サーバーなし — Direct Media Downloader がこのパイプラインを貼り付けたリンクにどのように適用するか
パイプラインは、提供されたホストからフェッチ→チャンクを受信→Blob の作成→ローカル ダウンロードのトリガーとなります。 ToolAcre リレーは関与しませんが、サードパーティ ホストへの実際のリクエストは必ず関与します。そのログで接続を確認できます。 Direct Media Downloader は、接続を行う前にその接続を通知し、ブラウザーのセキュリティ ルールがクロスオリジン読み取りを拒否するタイミングを通知します。