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

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의 버그 / 이상한가요?



답변

<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


답변

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


답변

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

Content-Disposition: attachment; filename=foo.pdf

희망이 도움이됩니다.


답변

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

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


답변

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

내가 이해하는 한, 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헤더에서 제거해야합니다. 브라우저가 문서를 렌더링할지 여부에 따라 다릅니다.

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


답변

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

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

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


답변

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은 문서없이 작동합니다.