문서로 해석되었지만 MIME 유형 application / zip으로 전송 된 자원


199

Chrome 12.0.742.112에서 다음 헤더로 리디렉션하면

HTTP/1.1 302 Found 
Location: http://0.0.0.0:3000/files/download.zip
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Ua-Compatible: IE=Edge
X-Runtime: 0.157964
Content-Length: 0
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Tue, 05 Jul 2011 18:42:25 GMT
Connection: Keep-Alive

다음과 같은 경우 다음 헤더를 반환합니다.

HTTP/1.1 200 OK 
Last-Modified: Tue, 05 Jul 2011 18:18:30 GMT
Content-Type: application/zip
Content-Length: 150014
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Tue, 05 Jul 2011 18:44:47 GMT
Connection: Keep-Alive

Chrome은 이전 페이지를 리디렉션하거나 변경하지 않으며 콘솔에 다음 경고 만보고합니다.

자원은 문서로 해석되지만 MIME 유형 application / zip으로 전송됩니다.

프로세스는 Firefox에서 올바르게 작동하며 새 탭을 열고로 이동하면 Chrome에서도 정상적으로 작동합니다 http://0.0.0.0:3000/files/download.zip. 내가 잘못하고 있습니까, 아니면 Chrome의 버그 / 이상한가요?


답변:


168

<a> 태그에서 HTML5 다운로드 속성을 지정할 수 있습니다 .

<a href="http://example.com/archive.zip" download>Export</a>

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download


3
"다운로드"속성은 즉 다른 브라우저에서 지원되지 않습니다. 다른 옵션이 있으면 도와주세요
Khunt

3
Chrome을 수정하지만 다른 브라우저는 손상시킵니다. 내 Android 전화는 해당 종류의 링크에서 다운로드되지 않습니다.
Betty

38
한숨. 이 'FIX'는 대부분의 브라우저에서 작동하지 않으며 Chrome 만 작동 합니다. 그리고 2016 년이므로 언제든지 그렇게 기대하지 마십시오.
a20

2
크롬 2019에서 차이를 만들지 않음
Michael Rogers

16
@all 2035 년 (향후부터 왔습니다)이며이를 지원할 컴퓨터가 없습니다.
Ali Farhoudi

34

요청 헤더 Content-Type: text/html에서 응답을 HTML로 해석하고 싶다는 메시지를 보냈습니다 . 이제 서버에서도 PDF 파일을 보내면 브라우저는이를 HTML로 이해하려고합니다. 그게 문제입니다. 이유가 무엇인지 찾기 위해 찾고 있습니다. :)


나는 Content-Type: application/zip아무 소용없이 보내려고했지만 여전히 '문서'로 처리하려고합니다. 압축 URL이 내 앱에서 동적이라는 점을 지적 할 가치가 있으므로 캐싱과는 아무런 관련이 없습니다.
Ashley Williams

1
감사! Chrome이 Accept요청 헤더를로 보내는 것과 관련이 text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8있습니까? 나는 여기에 절대적으로 걸려 있습니다.
Ashley Williams

5
아니요, text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Chrome에는 거의 모든 것을 받아들이는 부분이 있습니다 ( */*).
Saeed Neamati

3
무슨 소리 야? 질문에 요청 헤더가 없습니다. 둘 다 응답 헤더입니다.
doubleDown

1
그리고 나는 이것이 왜 대답이 아닌 의견이어야하는지 궁금해 여기 앉아 있습니까?
대시 보드

24

PDF 파일 (MIME 유형 application / pdf)을 제공 할 때이 문제가 발생했으며 Content-Disposition 헤더를 설정하여 문제를 해결했습니다.

Content-Disposition: attachment; filename=foo.pdf

희망이 도움이됩니다.


11
그러나 이것을 어디에 쓸 것인가?
hud

4
@coder 웹 서버에서 이와 같은 헤더를 추가합니다. 무엇을 사용하고 있는지 잘 모르므로 더 많은 정보를 제공하기가 어렵습니다. 서버에 어떤 언어 나 프레임 워크를 사용하고 있습니까?
Evan

7
우리의 헤더에이 문제를 가지고 있지만, 크롬은 여전히 경고를 던져
아담리스

nopes 그것은 크롬 버전 76.0.3809.132 (공식 빌드) (64 비트) 에 아무것도 수정하지 않습니다 나는 이미 헤더를 부착했습니다
Muhammad Omer Aslam

22

새 탭을 열면이 문제를 해결했습니다.

작동하지 않는 이유 전적으로 확실하지는 않지만 Chrome에서 페이지의 여러 다운로드를 처리하는 방식과 관련이있을 수 있습니다. 아마도 스팸이라고 생각하여 무시한 것입니다.


6
"새 탭을 열었다"는 것은 무엇을 의미합니까? 새 브라우저 창을 수동으로 열어서 다운로드 URL을 붙여 넣었습니까?
Tony R

2
예, 정확히 특정 탭의 응용 프로그램 상태에 버그가 있다고 가정했습니다.
Ashley Williams

52
사용자가 새 탭을 열 것으로 기대하지 않습니다 ... 그리고 파일을 우아하게 다운로드 할 수있는 탭을 찾지 못했습니다.
Yassir Ennazk

24
@Joram et. 알. -다운로드 탭 (대상 '_blank'사용)을 열면 문제가 해결되지 않고 "문서로 해석되지 않은 리소스"콘솔 경고 메시지가 새 탭으로 전송됩니다. 깔개 밑을 쓸어 넘기는 것은 해결책이 아닙니다.
colm.anseo

1
이것은 원래 답변을 명확하게 해결하지 못합니다. 진지하게 ... 사용자 doc에 "URL을 복사하고 새 탭을 열고 URL을 붙여 넣기"에 넣는 것은 무엇입니까? 사업 중단.
좌초 된 아이

22

메시지 자체에 대한 설명 만 찾을 수 없었 습니다. 여기 내 해석이 있습니다.

내가 이해하는 한, Chrome은 표시 할 수있는 자료 ( 문서 )를 기대했지만 표시 할 수없는 것 (또는 표시하지 말라고 지시받은 것)을 얻었습니다.

이것은 HTML 페이지 레벨에서 문서가 어떻게 선언되었는지 href( downloadRoy 메시지 의 속성 참조 )와 HTTP 헤더 (특히 Content-Disposition)를 통해 서버의 응답 내에서 어떻게 선언되는지에 대한 질문 입니다. 이것은 희망과 기대가 아닌 계약 의 문제입니다 .

에반의 길을 계속하기 위해 나는 그것을 경험했다.

Content-type: application/pdf
Content-disposition: attachment; filename=some.pdf

다음 과 일치하지 않습니다 .

<a href='some.pdf'>

Chrome에서 리소스가 문서로 해석되었지만 전송되었지만 ...

실제로 첨부 파일 처리는이를 의미합니다. 브라우저는 링크를 해석하지 말고 숨겨져있는 다른 목적을 위해 어딘가에 저장해야합니다. 여기에서 downloadhref에 없거나 Content-disposition헤더에서 제거해야합니다. 브라우저가 문서를 렌더링할지 여부에 따라 다릅니다.

도움이 되었기를 바랍니다.


9

node.js / express.js 응용 프로그램과 함께 Chrome 버전 30.0.1599.66에서 동일한 문제가 발생했습니다.

헤더는 있습니다 , 올바른 그들을 적절하게 자동으로이 퍼팅 지시와 같은 다른 브라우저에서 작동 세트를 표현하는 HTML 5 '다운로드'속성은하지 결의, 어떤 않는 그것은 크롬 고급 설정으로 이동하고 상자를 선택한다 결의를 "어디에 저장하는 질문 각 파일을 다운로드하기 전에 "

이 있었다는 것을 더 "자원이 문서로 해석 ...."후 오류가 나타납니다 그래서이 문제의 제목으로보고 우리의 서버 코드는, 그것의 세트를 저장할 때 잘못 콘솔에서 해당 오류를보고 그것의 크롬 정확 위치에 파일을 자동으로 저장합니다.


9

Javascript를 통해 파일 다운로드를 수행 할 때 비슷한 문제가 발생했습니다. 다운로드 속성을 추가해도 차이는 없었지만 target = '_ blank'를 추가해도 더 이상 '자원이 문서로 해석됩니다 ...'콘솔 메시지가 표시되지 않습니다.

다음은 아주 간단한 코드입니다.

var link = document.createElement('a');
link.target = '_blank';
link.href = url;
document.body.appendChild(link); // Required for Firefox
link.click();
link.remove(); 

직접 HTML로 시도하지는 않았지만 작동 할 것으로 기대합니다.

참고 Firefox는 문서에 링크를 추가해야하지만 Chrome은 문서없이 작동합니다.


4
그냥 경고, 대상 = '_blank'는 IE 11의 팝업 방지 메커니즘을 트리거합니다 ...
RobM

4

iframe에 src = "image_url"을 할당했을 때이 문제가 발생했습니다. iframe이 그것을 문서로 해석하는 것처럼 보이지만 그렇지 않습니다. 이것이 경고를 표시하는 이유입니다.


어떻게 고치셨습니까? iframe을 사용할 때 동일한 문제에 직면하는 것처럼
Shikha thakur

양식 데이터를 사용한 var photoData = new FormData(); 다음 contentType: false아약스 요청에서 속성을 설정했습니다 . 게시 요청은 다음 Content-Disposition: form-data;과 같습니다. 콘텐츠 유형Content-Type: text/html
Carmela

3

adding target="_blank"링크로 문제를 해결했습니다 . 이를 통해 크롬은 새 탭을 열고 반응 형 모드에서도 경고없이 PDF를로드합니다.


나는 이것을했고 효과가 있었다. window.open(href, '_blank');다운로드 후 새로운 탭 자동 폐쇄.
차드 리차드슨

1

ASP 웹 사이트 프로젝트 에서이 문제가 발생했습니다. '콘텐츠 길이'헤더를 추가하면 Chrome에서 다운로드가 다시 작동하기 시작했습니다.


1

이 문제는 Chrome 61 버전에서 다시 나타났습니다. 그러나 Chrome 62에서 수정 된 것 같습니다.

아래와 같은 RewriteRule이 있습니다

RewriteRule ^/ShowGuide/?$ https://<website>/help.pdf [L,NC,R,QSA]

Chrome 61에서는 PDF가 열리지 않고 콘솔에서 메시지가 표시되었습니다.

"Resource interpreted as Document but transferred with MIME type application/pdf: "

아래와 같이 다시 쓰기 규칙에 mime 유형을 추가하려고 시도했지만 도움이되지 않았습니다.

RewriteRule ^/ShowGuide/?$ https://<website>/help.pdf [L,NC,R,QSA, t:application/pdf]

Chrome을 최신 62 버전으로 업데이트했으며 PDF가 다시 표시되기 시작했습니다. 그러나 메시지는 여전히 콘솔에 있습니다.

다른 모든 브라우저에서는 제대로 작동했습니다.


1

방금 이것에 부딪 히고 도움이 될 수있는 다른 정보는 없었습니다 : 바보 같은 오류였습니다. 파일 다운로드를 시작하기 전에 브라우저에 출력을 보내고있었습니다. 놀랍게도, "이미 보낸 헤더"등과 같은 유용한 오류가 발견되지 않았습니다. 바라건대, 이것은 다른 누군가를 슬픔을 덜어줍니다!


0

필자의 경우 파일 이름이 너무 길어서 같은 오류가 발생했습니다. 200 문자 이하로 단축되면 잘 작동했습니다. (한도는 250 일 수 있습니까?)


0

파일 시스템에서 서비스하고 있었기 때문에이 오류가 발생했습니다. 일단 http 서버 크롬으로 시작하면 그것을 알아낼 수 있습니다.


0

내가 만든 다운로드 관리자와 동일한 문제가 발생했습니다. 파일 이름이 너무 길고 확장자가 잘려서 문제가 발생했습니다.

예 : 파일 이름 : 조직 프로토콜 및 기타 중요 사항 .pd

<?php
  header("Content-Disposition: attachment; filename=$File_Name");
?>

솔루션 : 파일 이름을 저장하기 위해 MySQL 데이터베이스 필드를 255로 늘리고 블롭을 저장하기 전에 길이 검사를 수행했습니다. 길이가 255보다 크면 250으로 자르고 파일 확장자를 추가하십시오.


0

아래 코드를 시도하면 이것이 효과가 있기를 바랍니다.

var Interval = setInterval(function () {
                if (ReportViewer) {
                    ReportViewer.prototype.PrintReport = function () {
                        switch (this.defaultPrintFormat) {
                            case "Default":
                                this.DefaultPrint();
                                break;
                            case "PDF":
                                this.PrintAs("PDF");
                                previewFrame = document.getElementById(this.previewFrameID);
                                previewFrame.onload = function () { previewFrame.contentDocument.execCommand("print", true, null); }
                                break;
                        }
                    };
                    clearInterval(Interval);
                }
            }, 1000);

0

오늘이 문제에 직면했으며 내 문제는 내 Content-Disposition태그가 잘못 설정되었다는 것입니다. pdf& 둘 다처럼 보입니다 . 대신 application/x-zip-compressed로 설정해야합니다 .inlineattachment

따라서 헤더를 설정하기 위해 Java 코드는 다음과 같습니다.

...
String fileName = "myFileName.zip";
String contentDisposition = "attachment";
if ("application/pdf".equals(contentType)
    || "application/x-zip-compressed".equals(contentType)) {
    contentDisposition = "inline";
}
response.addHeader("Content-Disposition", contentDisposition + "; filename=\"" + fileName + "\"");
...
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.