비디오 및 자막 · 다이렉트 미디어 다운로더
CORS가 브라우저에서 직접 다운로드를 차단할 수 있는 이유와 그 의미
· 작동 방식
코르 http 다운로드
브라우저 전용 다운로더는 동일 출처 정책 내에 있습니다. 이 게시물에서는 CORS가 무엇인지, 왜 일부 호스트에서는 가져오기를 허용하고 다른 호스트에서는 허용하지 않는지, 그리고 릴레이 서버가 없는 도구로는 이를 해결할 수 없는 이유를 설명합니다.
링크가 새 탭에서는 작동하지만 도구에서는 실패합니다. CORS 오류로 인해 사용자에게 생성되는 퍼즐입니다.
팟캐스트 인클로저는 주소 표시줄에 입력하면 재생되지만 페이지에서 가져오기를 사용하여 읽으려고 하면 실패할 수 있습니다. 탐색과 스크립트 읽기는 서로 다른 브라우저 기능입니다. 첫 번째는 리소스를 표시합니다. 두 번째는 다른 출처에서 실행되는 코드에 바이트를 노출할 수 있습니다.
Direct Media Downloader는 응답 청크를 읽고, 진행 상황을 보고하고, Blob을 빌드하고, 명명된 저장을 제공하기 때문에 두 번째 전원이 필요합니다. 미디어 호스트가 교차 출처 읽기를 선택하지 않은 경우 브라우저는 일반 탐색이 계속 작동하더라도 JavaScript가 응답을 수신하는 것을 중지합니다. 동일한 차이점은 응용 프로그램이 원격 파일을 변경하지 않고도 주소를 다른 응용 프로그램에 복사하면 다른 결과가 생성될 수 있는 이유를 설명합니다.
한 단락의 동일 출처 정책 — toolacre.com의 페이지가 다른 출처에서 제공되는 바이트를 자유롭게 읽을 수 없는 이유
원본은 구성표, 호스트 이름 및 포트를 결합합니다. 따라서 ToolAcre에서 제공되는 페이지와 게시자 CDN에서 제공되는 파일은 일반적으로 출처가 다릅니다. 동일 출처 정책은 한 출처의 스크립트가 다른 출처의 응답을 자유롭게 읽는 것을 방지하여 주변 브라우저 액세스를 통해 노출된 데이터를 보호합니다.
이 제한은 다운로더에서 생성된 경고가 아닌 브라우저에 의해 시행됩니다. 이는 애플리케이션 코드가 보호된 헤더 또는 본문 청크를 검사하기 전에 적용됩니다. 소스 호스트는 여전히 요청을 받을 수 있으므로 차단된 읽기를 "아무 것도 연결되지 않았습니다"라고 설명해서는 안 됩니다. 원본 경계는 파일 확장자뿐만 아니라 읽을 수 있는 응답에도 적용되므로 명백히 명백한 `.mp3` 접미사는 페이지 스크립트에 특별한 면제를 부여하지 않습니다.
Access-Control-Allow-Origin의 기능 — 도구가 아닌 파일의 호스트가 브라우저가 바이트를 넘겨줄 수 있는지 여부를 결정하는 방법
원격 서버는 적절한 `Access-Control-Allow-Origin` 헤더를 반환하여 선택할 수 있습니다. 해당 결정은 파일 호스트의 구성에 속합니다. ToolAcre는 다른 사람의 응답에 헤더를 추가할 수 없으며 요청 옵션은 수신 서버가 보류한 권한을 부여할 수 없습니다.
허용 헤더를 사용하면 브라우저가 페이지에 대한 응답을 노출할 수 있습니다. 저작권, 안전 또는 미디어 품질을 인증하지 않습니다. 마찬가지로, 누락된 헤더는 URL이 손상되었음을 증명하지 않습니다. 이는 단지 이 교차 원본 스크립트에 서버가 반환한 내용을 읽을 수 있는 권한이 부족하다는 의미일 뿐입니다. 호스트 관리자는 전체 스토리지 네임스페이스에 맹목적으로 허용 헤더를 추가하기보다는 지원하려는 정확한 요청 출처와 방법을 테스트해야 합니다.
교차 원본 읽기가 차단되었으며 스크립트가 저장 가능한 응답을 받지 못하는 이유
다운로더는 `no-cors` 대신 일반 CORS 모드 가져오기를 사용합니다. 교차 출처 읽기가 거부되면 Fetch는 거부하고 애플리케이션 코드는 사용 가능한 헤더나 본문을 수신하지 않습니다. 브라우저는 의도적으로 CORS를 모든 전송 오류와 구별할 만큼 충분한 세부 정보를 공개하지 않기 때문에 도구는 결합된 `CORS_OR_NETWORK` 범주를 보고합니다.
불투명 응답은 명시적 `no-cors` 요청에 속하지만 해당 모드는 이 작업을 해결하지 못합니다. JavaScript는 불투명 본문을 검사하여 의도한 Blob으로 바꿀 수 없습니다. 따라서 읽을 수 없는 응답을 얻고 이를 저장할 수 있는 척하는 대신 구현이 정직하게 실패합니다. 응용 프로그램은 숨겨진 바이트를 결코 얻지 못하기 때문에 진행 상황을 정확하게 계산할 수 없고 보호된 헤더에서 파일 이름을 추론할 수 없으며 헤더에서 유용한 개체 URL을 만들 수도 없습니다.
작업한 예: 네트워크 패널에서 실패한 요청 읽기 — 누락된 헤더를 찾아내고 릴레이 서버에 연결되지 않았는지 확인
네트워크 패널을 열고 로그를 보존한 후 링크 확인을 한 번 누르세요. 시도된 HEAD 행은 대상을 식별하고 브라우저의 CORS 진단을 표시할 수 있습니다. 가능한 경우 응답 헤더를 검사하세요. 허용 헤더가 없으면 페이지 코드가 광고된 크기나 MIME 유형을 수신하지 못한 이유가 설명됩니다.
실패한 확인은 이미 실제 요청이 시도되었다는 증거입니다. 붙여넣은 URL을 전달하는 ToolAcre API 행이 없으며 두 번째 릴레이 요청도 없습니다. 호스트가 HEAD를 제대로 허용하지 않는 경우 다운로드는 GET을 사용하기 때문에 여전히 다르게 동작할 수 있지만 어느 경로도 자동으로 아키텍처를 전환하지 않습니다. 콘솔 문구는 브라우저마다 다르므로 운영 보고서에 대해 한 공급업체의 문구에 의존하는 대신 실패한 행 및 헤더 증거를 보존하세요.
도구가 주변을 라우팅하지 않는 이유 — 프록시는 링크를 서버로 보내는 것을 의미하며, 이는 도구가 수행하지 않을 것을 정확히 약속하는 것입니다.
프록시는 브라우저의 교차 출처 읽기를 방지하면서 서버 측에서 파일을 가져와 동일한 출처 끝점에서 반환할 수 있습니다. 또한 링크와 릴레이된 모든 바이트를 해당 운영자에게 공개하고 대역폭을 발생시키며 임의 가져오기 표면을 생성합니다. ToolAcre에는 의도적으로 그러한 끝점이 없습니다.
인터페이스에서 제안하는 대체 방법은 가능한 경우 브라우저의 기본 링크를 작업으로 저장하는 것입니다. 이는 페이지 스크립트 읽기가 아닌 탐색 또는 다운로드 처리입니다. 제안은 호스트 정책을 약화시키거나 방문자를 인증하거나 보호된 스트림을 직접 파일로 전환하지 않습니다. 이러한 아키텍처 거부는 또한 ToolAcre가 브라우저 거부를 명백한 성공으로 전환하기 위해 복사본, 액세스 로그 또는 아웃바운드 가져오기 권한을 축적하는 것을 방지합니다.
여기서 다루지 않는 내용 — CORS는 403, 로그인 벽 또는 만료된 서명된 URL과 동일하지 않습니다.
CORS 실패는 HTTP 403가 아니지만 어느 쪽이든 워크플로를 중지할 수 있습니다. 403은 호스트가 선택한 응답 상태입니다. 만료된 서명으로 인해 서명이 발생할 수 있습니다. 로그인 벽에는 이 도구가 생략한 자격 증명이 필요합니다. 네트워크 중단, DNS 오류 및 인증서 문제는 브라우저의 일반적인 가져오기 거부를 공유할 수 있습니다.
따라서 진단에서는 모든 오류를 누락된 헤더로 처리하는 대신 네트워크 및 콘솔 패널을 함께 사용해야 합니다. ToolAcre는 읽을 수 있는 응답이 도착할 때 알려진 HTTP 상태를 보고하지만 브라우저가 전송 형태의 예외만 제공하는 경우 추측을 거부합니다. 이러한 범주를 별도로 유지하면 승인된 공용 객체에 대해 CORS를 구성하고, 만료된 링크를 새로 고치고, 공급자를 통해 로그인하거나, 연결을 수정하는 등 올바른 해결 방법을 찾을 수 있습니다.
요약: CORS는 호스트 측 결정입니다. Direct Media Downloader가 자동으로 서버로 돌아가는 대신 정직하게 보고하는 방법입니다.
CORS는 미디어 호스트에서 제어됩니다. 브라우저 전용 다운로더는 해당 선택을 따르고 설명하고 중지할 수 있습니다. 클라이언트 코드의 선택을 재정의할 수 없습니다. 이 경계는 임의의 페이지가 범용 크로스 사이트 리더가 되는 것을 방지하기 때문에 불편합니다.
호스트 제공 다운로드 컨트롤을 사용하거나, CORS 지원 인증 파일을 요청하거나, 적절한 경우 기본 저장 링크를 사용하세요. Direct Media Downloader는 더 성공적인 버튼 뒤에 서버를 숨기는 것이 아니라 거부를 노출하고 브라우저에서 호스트로의 직접적인 경로를 보존함으로써 약속을 지킵니다. 따라서 성공적인 결과는 협조적인 호스트나 다른 합법적인 브라우저 시설에서 나와야 하며, 동일한 거부된 읽기를 유지하면서 오류 텍스트를 억제해서는 안 됩니다.