비디오 및 자막 · 다이렉트 미디어 다운로더
브라우저가 fetch 및 Blob을 사용하여 직접 링크에서 파일을 다운로드하는 방법
· 작동 원리
다운로드 브라우저 API 코르
브라우저 도구가 직접 링크를 저장된 파일로 전환하는 데 사용하는 파이프라인을 안내합니다. 즉, 바이트를 가져와서 Blob으로 보관하고 다운로드 속성에 전달합니다. 어떤 단계에서도 서버가 필요하지 않은 이유를 설명합니다.
링크는 파일을 저장하는 대신 플레이어를 엽니다. 직접 MP4 또는 MP3 링크를 클릭하면 일반적으로 인라인으로 재생되는데, 이는 다운로더가 해결하는 문제입니다.
브라우저가 해당 MIME 유형을 재생하는 방법을 알고 있기 때문에 직접 MP3 링크를 클릭하면 플레이어가 열릴 수 있습니다. 동일한 바이트를 저장하는 것은 별도의 작업입니다. 핵심 단어는 직접적입니다. 즉, 플레이어가 포함된 웹 페이지나 미디어 세그먼트를 나열하는 매니페스트가 아닌 실제 파일 응답에 대한 링크입니다. 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에서 하나의 MP3를 따라 디스크의 파일로 이동
에피소드.mp3로 끝나는 승인된 첨부 URL을 노출하는 팟캐스트 게시자를 상상해 보세요. 정확한 주소를 붙여넣고 발표된 호스트를 검사한 후 링크 확인을 사용하세요. HEAD가 허용되면 오디오/mpeg 및 예상 바이트 수가 표시될 수 있습니다. 그런 다음 Fetch는 게시자에게 MP3 바이트를 요청하고 이를 Blob으로 스트리밍한 다음 에피소드.mp3을 저장합니다. 호스트가 CORS 헤더를 생략하면 브라우저는 자체 탭에서 링크를 재생할 수 있지만 이 페이지는 스크립트로 링크를 가져올 수 없습니다. 그러면 "다른 이름으로 링크 저장"이 올바른 경로일 수 있습니다. 파일을 저장할 수 있는 사용자의 권리는 서버가 기술적으로 파일 가져오기를 허용하는지 여부와 별개입니다.
정리: 객체 URL 취소 및 메모리 확보 — 잘 구축된 다운로더가 저장이 완료된 후 Blob을 해제하는 이유
임시 개체 URL은 지원 Blob에 대한 참조를 유지합니다. 모든 URL을 활성 상태로 유지하는 다운로더는 수명이 긴 탭에 대용량 파일을 보관할 수 있습니다. ToolAcre의 공유 다운로드 유틸리티는 저장 작업을 위한 로컬 URL을 생성하고 완료되면 취소합니다. 취소는 응답 판독기를 해제하고 부분 청크를 삭제합니다. 매우 큰 파일의 경우 호스트에서 일반 브라우저를 다운로드하는 것이 페이지 메모리에서 전체 응답을 수집하는 것보다 더 적합합니다.
여기에 포함되지 않는 내용 - 페이지 URL, 스트리밍 매니페스트, DRM 및 로그인이 필요한 링크
이 도구는 비디오 페이지 뒤에 숨겨진 미디어를 찾거나 HLS/DASH .m3u8 또는 .mpd 매니페스트를 구문 분석하거나 DRM 우회, 헤더 스푸핑 또는 세션 보호 스트림에 액세스하지 않습니다. 개인 콘텐츠를 다운로드하지 않으며 라이선스가 파일 복사 권한을 부여하는지 여부를 결정하지 않습니다. 403, 로그인 페이지로의 리디렉션 또는 CORS 오류는 문서화되지 않은 프록시를 검색하라는 신호가 아니라 이해해야 할 경계입니다.
요점: 세 가지 브라우저 API, 서버 없음 - Direct Media Downloader가 붙여넣은 링크에 이 파이프라인을 적용하는 방법
파이프라인은 제공된 호스트에서 가져오고 → 청크를 수신하고 → Blob을 생성하고 → 로컬 다운로드를 트리거합니다. ToolAcre 릴레이는 포함되지 않지만 타사 호스트에 대한 실제 요청은 절대적으로 포함됩니다. 해당 로그에서 연결을 볼 수 있습니다. Direct Media Downloader는 접촉을 하기 전에 이를 알리고 브라우저 보안 규칙이 교차 출처 읽기를 거부할 때 이를 알려줍니다.