programing

리소스는 문서로 해석되지만 MIME 유형의 응용 프로그램/zip과 함께 전송됨

shortcode 2022. 11. 4. 22:16
반응형

리소스는 문서로 해석되지만 MIME 유형의 응용 프로그램/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 유형의 응용 프로그램/zip과 함께 전송됩니다.

프로세스는 Firefox에서 하며, "Firefox", "Chrome"로 이동하면 합니다.http://0.0.0.0:3000/files/download.zip제가 뭘 잘못했나요, 아니면 Chrome의 버그/크롬 버그인가요?

HTML5 다운로드 어트리뷰트는 <a> 태그로 지정할 수 있습니다.

<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로 해석하려고 합니다.그게 문제입니다.

나는 어디에서도 그 메시지에 대한 설명만을 찾을 수 없었다.제 해석은 이렇습니다.

Chrome은 표시할 수 있는 소재(문서)를 기대하고 있었습니다만, 표시할 수 없는 것(또는 표시하지 말라고 한 것)을 취득한 것으로 알고 있습니다.

은 둘 다 문서가 선언되었는지에 입니다.href 「」를 해 주세요).downloadAtribute Roy'Message) 및 헤더 Roy's Message)에 서버의.Content-Disposition이것은 희망이나 기대와는 달리 계약에 관한 문제입니다.

이반의 길을 계속 가기 위해, 나는 다음과 같은 경험을 했다.

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

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

<a href='some.pdf'>

Chrome이 "Resource" (리소스)를 울립니다.문서로 해석되지만 전송되었습니다.

실제로 첨부 파일 처리는 이러한 의미일 뿐입니다.브라우저는 링크를 해석하지 않고 다른 목적(숨긴 목적)을 위해 링크를 저장합니다.위도 마찬가지입니다.download is is is is ishref , 「」Content-disposition를 헤더에서 삭제해야 합니다.브라우저에서 문서를 렌더링할지 여부에 따라 다릅니다.

이게 도움이 됐으면 좋겠다.

PDF 파일(MIME type application/pdf)을 제공할 때 이 문제가 발생하여 Content-Disposition 헤더를 설정하여 해결했습니다.다음은 예를 제시하겠습니다.

Content-Disposition: attachment; filename=foo.pdf

도움이 됐으면 좋겠다.

새 탭을 여는 것만으로 이 문제를 해결했습니다.

왜 작동하지 않는지는 잘 모르겠지만, Chrome이 한 페이지에서 여러 다운로드를 처리하는 방식과 관련이 있을 수 있습니다. 아마도 스팸인 줄 알고 무시했을 것입니다.

Javascript를 통한 파일 다운로드에서도 비슷한 문제가 있었습니다.다운로드 특성을 추가해도 아무런 차이가 없지만 target='_blank'를 추가했습니다. - 'Resources interprated as Document'가 더 이상 표시되지 않습니다..' 콘솔메시지

여기 내 아주 간단한 코드가 있다.

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은 이 링크가 없어도 작동한다는 것을 알게 되었습니다.

오늘 크롬 버전 30.0.1599.66에서 node.js / express.js 응용 프로그램에서 동일한 문제가 발생했습니다.

헤더는 올바르고, express는 자동으로 적절하게 설정되며, 다른 브라우저에서는 그림과 같이 동작합니다.html 5 'download' Atribute를 넣어도 해결되지 않습니다.해결된 것은 Chrome 상세 설정으로 이행하여 "Assk to save each file before download" 체크박스를 켜는 것입니다.

그 후 이 문제의 제목에 "Resource interprected as document..." 오류가 보고되지 않았기 때문에 서버 코드가 올바른 것으로 보입니다. 파일을 자동으로 저장하도록 설정되어 있을 때 콘솔에서 오류를 잘못 보고하는 것은 Chrome입니다.

iframe에서 src="image_url"을 할당했을 때 이 문제가 발생했습니다.iframe이 문서로 해석하는 것 같은데 아닙니다.그래서 경고가 표시되는 겁니다.

는 그 를 는는음음음음음 i i다.adding target="_blank"링크에 접속합니다.이를 통해 크롬은 응답 모드에서도 경고 없이 새 탭을 열고 PDF를 로드합니다.

방금 이것과 마주쳤지만, 내가 찾을 수 있는 다른 정보는 도움이 되지 않았다: 그것은 어리석은 오류였다.파일 다운로드를 시작하기 전에 브라우저에 출력을 보내고 있었습니다.의외로 도움이 되는 에러는 발견되지 않았습니다(「headers are sended」등).이것이 다른 사람의 슬픔을 덜어주길 바란다!

ASP 웹사이트 프로젝트에서 이 문제가 있었습니다.Content-Length 헤더를 추가하면 Chrome에서 다운로드가 다시 시작됩니다.

이 문제는 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 type을 rewrite rule에 추가하려고 했지만 도움이 되지 않았습니다.

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

Chrome을 최신 62버전으로 업데이트 했더니 PDF가 다시 뜨기 시작했어요.그러나 메시지는 콘솔에 남아 있습니다.

다른 브라우저에서는 정상적으로 동작하고 있었습니다.

문제

저도 비슷한 문제가 있었어요.js로 메시지를 받았습니다.

리소스는 문서로 해석되지만 MIME 유형 텍스트/csv와 함께 전송됨

하지만 크롬 콘솔에도 메시지가 떴다.

혼합 콘텐츠:'https://my-site/'의 사이트가 보안 연결을 통해 로드되었지만 'https://my-site/Download?id=99a50c7b'의 파일이 보안되지 않은 연결을 통해 리디렉션되었습니다.이 파일은 HTTPS를 통해 제공되어야 합니다.이 다운로드가 차단되었습니다.

여기에서는, 시큐어인 접속을 사용할 필요가 있는 것을 나타내고 있습니다(그러나, 스킴은, 이상하게도 메세지에 이미 https 가 되어 있습니다).

문제는 서버 측에 빌드된 파일 다운로드용 href입니다.이 href는 제 경우 http를 사용했습니다.

해결 방법

그래서 파일 다운로드용 href 빌드 시 스킴을 https로 변경하였습니다.

제 경우 파일명이 너무 길어서 같은 오류가 발생하였습니다.200자 이하로 줄이면 잘 작동한다.(제한은 250이 될 수 있습니다.)

CSV 파일을 몇 번 다운로드(많은 테스트)한 후 크롬은 이 페이지에서 다운로드를 더 허용할지 여부를 물었습니다.방금 창문을 닫았어요.그 후 Chrome은 파일을 다운로드하지 않았지만 콘솔에는 다음과 같이 표시됩니다.

"리소스는 문서로 해석되지만 MIME 형식 텍스트/csv로 전송됨"

Chrome(Ctrl+Shift+Q)를 재기동하면 문제를 해결할 수 있습니다.

[업데이트] 이 게시물이 삭제된 이유는 모르겠지만 해결 방법이 있었습니다.이전에 여러 파일을 다운로드하려고 한다는 메시지를 받았는데, 아니라고 대답한 것 같습니다.'자원 해석.."라는 메시지가 뜨면 브라우저가 정상적으로 동작합니다.경우에 따라서는 이것이 정답일 수 있습니다.

파일 시스템에서 서비스 중 이 오류가 발생했습니다.일단 내가 http 서버 크롬으로 시작하면 알아낼 수 있었다.

제가 만든 다운로드 매니저에서도 같은 문제가 발생했습니다.파일명이 너무 길어서 확장자가 잘려나가는 문제가 있었습니다.

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

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

솔루션:파일 이름을 저장하기 위해 MySQL 데이터베이스 필드를 255로 늘리고 BLOB를 저장하기 전에 길이 검사를 수행했습니다.길이가 255를 넘으면 250으로 잘라내고 파일 확장자를 추가합니다.

아래 코드를 사용해 보세요.이것이 당신에게 도움이 되길 바랍니다.

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);

나의 의 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.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 + "\"");
...

문제

Saed Neamati(https://stackoverflow.com/a/6587434/760777):

요청 헤더에 Content-Type: text/html 이 전송되었습니다.이것은 응답을 HTML 로 해석하고 싶은 것을 의미합니다.이제 서버에서 PDF 파일을 보내도 브라우저는 그것을 HTML 로 이해하려고 합니다.

해결 방법

정확한 헤더를 보내라.파일의 올바른 MIME 형식을 전송합니다.마침표!

어떻게?

아, 그건 당신이 무엇을 하고 있느냐에 달려있습니다(OS, 언어).

javascript에서 동적으로 생성된 다운로드 링크에 문제가 있었습니다.이 링크는 mp3 파일을 다운로드하기 위한 것입니다.mp3 파일은 문서도 아니고 pdf, zip 파일, flac 파일도 아니며 목록은 계속됩니다.

그래서 다음과 같이 링크를 만들었습니다.

<form method="get" action="test.mp3"> 
  <a href="#" onclick="this.closest(form).submit();return false;" target="_blank">
    <span class="material-icons">
      download
    </span>
  </a>
</form>

이렇게 바꿨어요

<form method="get" action="test.mp3" enctype="multipart/form-data"> 
  <a href="#" onclick="this.closest(form).submit();return false;" target="_blank">
    <span class="material-icons">
      download
    </span>
  </a>
</form>

문제는 해결됐습니다.폼 태그에 Atribut을 추가하면 해결되었습니다.하지만 일반적인 해결책은 없습니다.다양한 시나리오가 있습니다.서버로부터 파일을 송신하는 경우(CX#, Java, PHP 등의 언어로 동적으로 작성), 올바른 헤더를 송신할 필요가 있습니다.

사이드 노트:헤더를 송신하기 전에, 아무것도 송신하지 않게 주의하세요.

같은 에러가 발생했습니다.해결 방법은 속성을 넣는 것입니다.

target = "_ blank"

마지막으로:

<a href="/uploads/file.*" target="_blank">Download</a>

서 ★★★★★*는 다운로드할 파일의 확장자입니다.

언급URL : https://stackoverflow.com/questions/6587393/resource-interpreted-as-document-but-transferred-with-mime-type-application-zip

반응형