Chrome에서 때때로 PDF를 열지 않고 PDF를 다운로드하는 이유는 무엇입니까? [복제]


125

특정 PDF 파일 주소로 이동하면 Chrome은 내장 된 PDF 뷰어를 사용하여 PDF를 열지 않고 PDF를 다운로드합니다. 그런 다음 페이지가 빈 흰색입니다.

Chrome 설정에는 문제가 없습니다. 다른 PDF 파일의 주소를 시도하고 Chrome이 예상대로 작동합니다 (Chrome의 내장 PDF 뷰어를 사용하도록 설정했습니다). 그러나 동일한 문제가있는 주소를 시도 할 때마다 Chrome은 PDF를 다운로드 한 다음 빈 페이지를 표시합니다.

Windows 10 및 Chrome을 사용하고 Version 63.0.3239.84 (Official Build) (64-bit)있습니다.

이번에는 문제가되는 특정 URL이 여기에 있습니다 (Google 검색 결과).

답변:


159

기본적으로 이것은 웹 사이트가 브라우저에 지시하기 때문에 발생합니다. 때로는 웹 사이트 개발자가 파일 공유 사이트에서 일반적으로 이러한 동작을 원하기 때문에 결정하기 때문입니다. 다른 경우에는 사용중인 소프트웨어 (예 : 포럼 또는 블로그 소프트웨어)의 기본 옵션이기 때문입니다. 때로는 사이트 개발자가 자신이 무엇을하고 있는지 전혀 모르기 때문입니다.


Content-Disposition

일반적으로 사이트 Content-Disposition가 응답에 헤더를 전송하기 때문 입니다. 특히 inline또는을 보낼 수 있습니다 attachment.

inline 달리 지정되지 않은 경우 기본값이며, 가능한 경우 브라우저가 브라우저 창에서 파일을 엽니 다.

attachment 항상 파일을 다운로드하고 브라우저 내에서 파일을 열지 마십시오.


브라우저의 개발자 도구를 열면 특정 링크가 다음 응답 헤더를 보내는 것을 볼 수 있습니다.

Content-Disposition: attachment; filename="Schubert-Sonata-21-B-flat.pdf"
Content-Type: application/pdf

이렇게하면 브라우저가 항상attachment 파일을 다운로드 ( ) Schubert-Sonata-21-B-flat.pdf하고 URL에서 유추하지 않고 기본 파일 이름 을 지정합니다. 또한 브라우저는 application/pdf파일 이라고 브라우저에 올바르게 알려줍니다. 그러나 attachment브라우저 이기 때문에 브라우저는 여전히 기본적으로 다운로드로 설정됩니다.


인라인 처리 세부 사항

A는 때 Content-Disposition인라인 (또는 지정)이며, 브라우저는 기본 내장 된 뷰어에서 파일을 열려고합니다. 브라우저가 무엇인지 파일 유형을 알고, 경우에만 작동 하고 브라우저 유형을 여는 방법을 알고있다.

타입 감지

파일 유형은 서버에서 Content-Type헤더를 사용하여 지정할 수 있습니다 . 예를 들어, 가장 일반적인 인라인 유형은 text/html, application/javascript그리고 text/css현대적인 웹 사이트의 세 가지 주요 부분을 구성. 당신은 또한 더 난해한 유형을 가질 수 있습니다 application/pdf.

또 다른 가능성은 서버가 지정한이다 Content-Typeapplication/octet-stream. 이것은 가장 일반적인 유형이며 파일이 임의의 데이터임을 브라우저에 알려줍니다.이 시점에서 브라우저가 할 수있는 유일한 일은 파일을 다운로드하는 것입니다 (이론적으로 우리는 그것을 얻을 것입니다).

Content-Type서버에서 a 를 지정하지 않은 경우 (때때로도) 브라우저는 파일을 읽고 패턴을 찾아서 유형을 추측하려고하는 스니핑 을 수행 할 수 있습니다 .

타입 취급

inline지정되지 않은 처리를 가진 파일을 수신 하면 브라우저는 가능한 경우 브라우저 내에서 파일을 열려고 시도해야합니다. 이를 위해 파일 형식을보고 형식을 인식하면 파일 형식을 열려고 시도합니다. 대부분의 브라우저는 text/간단한 텍스트 뷰어에서 모든 유형을 열고 text/html웹 페이지 로 렌더링하려고 시도 하며 특수 구문 강조 표시된 뷰어 등에서 application/json 수 있습니다 .

유형 application/octet-stream은 특별히 처리되었습니다. 임의의 바이트 스트림을 나타내는 가장 일반적인 형식이어야하므로이 "형식"의 모든 파일에 적용 할 수있는 처리기가 없어야합니다. 예를 들어, 파이어 폭스에서, 이 기본 핸들러를 설정하는 무능력으로 명단 에 대해 application/octet-stream.

일부 웹 사이트는 비표준 유형도 사용했습니다. 나는 application/force-download브라우저를 사용하여 유형과 관련이있는 것을 인식하지 못하지만 특수 처리를 즐기지 않기 때문에 다운로드로 사용되는 것을 보았습니다 application/octet-stream.


약간의 역사 수업

PDF를 처리하는 방법을보기 위해 웹 기록을 조금 살펴볼 수 있습니다. 과거에 브라우저는 PDF가 무엇인지 전혀 몰랐습니다. 그래서 그들은 열 수 없었습니다. 그러나 내장 된 PDF 뷰어가 사용되기 훨씬 전에 브라우저에서 PDF가 열리는 것을 보았습니다. 어떻게 작동합니까?

예전에는 제한된 확장 기능 / 애드온으로 수행 할 수있는 것보다 훨씬 많은 제어 기능으로 브라우저 기능을 확장 할 수있었습니다. 그것들은 가장 일반적으로 플러그인 이라고 알려져 있습니다 . Internet Explorer에서는 ActiveX 컨트롤이었습니다. Mozilla Firefox 및 이후 Google Chrome에서는 NPAPI 플러그인이었습니다. 이 플러그인은 다른 프로그램이 할 수있는 모든 작업을 수행 할 수 있으며 브라우저에서 인식 할 수없는 특정 파일 형식에 대한 처리기로 추가 등록 할 수 있습니다. (실수로, 이것은 나중에 큰 보안 위험으로 판명 되었으며이 강력한 플러그인에 대한 지원은 점차적으로 떨어졌습니다 ...)

플러그인 시대에는 Adobe Acrobat Reader를 설치 한 다음 application/pdfMIME 유형을 등록하는 ActiveX 또는 NPAPI 플러그인을 설치하고 플러그인을 사용하여 해당 유형을 인라인으로 열도록 브라우저에 지시합니다.

물론, 이러한 플러그인으로 인한 많은 보안 및 성능 문제가 발생한 후 주요 브라우저 공급 업체는 대부분의 플러그인에 대한 지원을 중단하면서 자체 PDF 뷰어를 통합하기로 결정했습니다. 우리가 여전히 볼 수있는 유일한 것은 Adobe Shockwave Flash application/x-shockwave-flash입니다.

실제로 이것에 대한 몇 가지 남은 컨트롤이 있습니다. 예를 들어 Firefox에서는 Preview in Firefox옵션이 여전히 존재합니다.

옵션 스크린 샷

과거에는 해당 유형을 등록한 여러 플러그인 중에서 선택할 수있었습니다. 예를 들어 Flash에 등록 된 유형 목록은 다음과 같습니다.

등록 된 유형의 스크린 샷

당시에는 HTML5와 함께 제공되는 많은 미디어 지원이있었습니다. 브라우저는 MP4 컨테이너 또는 H.264 비디오를 처리하는 방법을 모르고 MP3 파일을 재생하는 방법 등을 모릅니다. VLC와 같은 미디어 플레이어가 제공하는 플러그인을 볼 수 있습니다. 또는 Windows Media Player 또는 웹 사이트에도 Flash에 내장 된 미디어 플레이어가 내장되어 있습니다.


때로는 서버가 설정 될 때도 발생 Content-Type: application/octet-stream하지만 요즘에는 훨씬 덜 일반적입니다.
Michael Hampton

2
"인라인"및 "첨부 파일"값이 사용되는 이유는 원래 Content-Disposition이 MIME 전자 메일에 대해 지정 되었기 때문입니다.이 값이 훨씬 더 적절합니다.
hobbs

@hobbs : 좀 더 추상적 인 일이있을 때 재사용 가능한 기술의 도메인 별 용어에 관한 사례 연구 ^ _ ^
Orbit in Orbit

23

설명을 찾았습니다. 내가 찾은 답변 에 따르면 MIME 콘텐츠 유형이 application/pdf아닌 "잘못된 또는 일반 MIME 유형"으로 설정된 경우 Chrome에서 PDF를 다운로드하는 것으로 보입니다 application/octet-stream.

또한 "대부분의 웹 서버는 기본 application/octet-streamMIME 유형을 사용하여 알 수없는 유형의 리소스를 전송 합니다. 보안상의 이유로 대부분의 브라우저는 이러한 리소스에 대한 사용자 지정 기본 동작을 설정할 수 없으므로 사용자가이를 사용하기 위해 디스크에 저장하도록합니다."


3
실제로이 논리는 컨텐츠 처리를 대체하므로 기억해야합니다.
궤도에서 가벼움 경주

@LightnessRacesinOrbit 디스크에 저장하는 것 외에 (스니핑을 막는 것)으로 브라우저가 수행 할 수없는 유형을 브라우저에 제공하므로 처리를 무시 하지 않습니다 . 물론, 보이는 효과는 동일합니다.
Bob

@ 밥 : 좋아, 그것은 공정한 해석입니다
궤도에서 가벼움 레이스

20

이는 파일이 첨부 파일임을 지정하는 HTTP Content-Disposition헤더 때문 입니다. 이렇게하면 파일을 직접 열지 않고 파일을 다운로드하도록 브라우저에 지시합니다.

이 동작을 무시할 수있는 Chrome 애드온이 있습니다. 다음 이미지는 Firefox 개발자 도구에서 가져온 것입니다.

Firefox 개발 도구에 표시된 HTTP 요청


비슷한 Firefox 애드온도 있는지 물어봐도 될까요?
davyjones

3
@davyjones 당신은 할 수 있습니다. 당신이 파이어 폭스 부가 기능이 있는지 질문 할 필요가 없습니다 그래서, 여기에 하나입니다.
wizzwizz4

1
이 플러그인은 더 이상 작동하지 않는 것 같습니다
Paul Slocum
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.