リソースはドキュメントとして解釈されますが、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

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


3
「ダウンロード」属性は、ieまたは他のブラウザではサポートされていません。あなたは他のオプションを持っている場合は、ヘルプ、私喜ば
Renish Khunt

3
これはChromeを修正しますが、他のブラウザを壊します。私のAndroidフォンはそのようなリンクからダウンロードできません。
Betty、

38
はぁ。この「修正」はほとんどのブラウザでは機能しません-Chromeのみです。そして、それは2016年ですので、すぐにそれが起こることを期待しないでください。
a20

2
Chrome 2019で違いはありません
マイケルロジャース

17
@all 2035年(私は未来から来ました)であり、これをサポートするコンピュータがありません。
Ali Farhoudi、

34

リクエストヘッダーでを送信しました。Content-Type: text/htmlこれは、レスポンスをHTMLとして解釈することを意味します。サーバーでもPDFファイルを送信した場合、ブラウザーはそれをHTMLとして理解しようとします。それが問題です。私はその理由が何であるかを見るために検索しています。:)


Content-Type: application/zip役に立たないように送信しようとしましたが、まだ「ドキュメント」として処理しようとしています。私のアプリではzip URLが動的であることも指摘する価値があるので、キャッシングとは関係ありません。
アシュリーウィリアムズ

1
ありがとう!おそらく、Acceptリクエストヘッダーをとして送信するChromeと関係があるのtext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8でしょうか?私はここで絶対に困惑しています。
アシュリーウィリアムズ

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
しかし、これをどこに書くのですか?
2016

4
@coder Webサーバーからこのようなヘッダーを追加します。そのために何を使用しているのかわからないため、詳細情報を提供することは困難です。サーバーにどの言語またはフレームワークを使用していますか?
エヴァン

7
これをヘッダーに含めても、Chromeは警告をスローします
Adam Reis

いいえ、Chromeのバージョン76.0.3809.132(公式ビルド)(64ビット)では何も修正されません。ヘッダーはすでに添付されています
Muhammad Omer Aslam

22

これを修正しました...新しいタブを開くだけです。

なぜ機能しなかったのかは完全にはわかりませんが、Chromeがページ上の複数のダウンロードを処理する方法に何らかの影響がある可能性があります。


6
「新しいタブを開いた」とはどういう意味ですか??? 新しいブラウザウィンドウを手動で開き、そこにダウンロードURLを貼り付けましたか?
トニーR

2
はい、正確に。特定のタブのアプリケーション状態のバグだと思いました。
アシュリーウィリアムズ

52
ユーザーが新しいタブを開くことは期待していません...ファイルをダウンロードするためのタブを開くのもエレガントではありません。
Yassir Ennazk 2012

24
@Joram et。al。-ダウンロード用のタブを開く(ターゲット '_blank'を使用)-問題は解決せず、「ドキュメントとして解釈されたリソース」コンソールの警告メッセージが新しいタブに転送されるだけです。敷物の下を掃除することは解決策ではありません。
colm.anseo

1
これは明らかに元の答えを解決しません。真剣に...私はユーザードキュメントに何を入れますか「URLをコピーし、新しいタブを開き、URLを貼り付けて...」?ビジネスダウン。
Stranded Kid

22

メッセージの説明だけではどこにも見つかりませんでした。これが私の解釈です。

私が理解している限り、Chromeは表示できる可能性のある素材(ドキュメント)を想定していましたが、表示できないもの(または表示しないように指示されたもの)を取得しました。

これは、ドキュメントがでHTMLページレベルで宣言された方法hrefdownloadRoyのメッセージの属性を参照)と、HTTPヘッダー(特にContent-Disposition)によってサーバーの応答内で宣言された方法の両方の問題です。これは希望と期待とは対照的に、契約の問題です。

エヴァンの道を続けるために、私はそれを経験しました:

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

一貫性がありません

<a href='some.pdf'>

ChromeはResourceをドキュメントとして解釈しますが、転送します…

実際、添付ファイルの処理はこれを意味するだけです。ブラウザはリンクを解釈せず、他の目的(非表示)のためにどこかに保存します。ここでは、のdownloadhrefに欠落しているかContent-disposition、ヘッダーから削除する必要があります。これは、ブラウザにドキュメントをレンダリングさせるかどうかによって異なります。

お役に立てれば。


9

今日、同じバージョンの問題がChromeバージョン30.0.1599.66でnode.js / express.jsアプリケーションで発生しました。

ヘッダー あり、正しいそれらを適切に自動的に、それは入れて、示されているように、他のブラウザで動作セットを表現するHTML 5「ダウンロード」属性がない決意、何んでした、それはクロム高度な設定に入るとボックスをチェックしている決意を「ここで保存するように依頼ダウンロード前の各ファイル」

その後、この問題のタイトルにあるように「リソースはドキュメントとして解釈されました...」エラーは報告されなかったためサーバーコードは正しいようです。保存するように設定されている場合、コンソールでエラーを誤って報告しているのはChromeです。自動的に場所にファイル。


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
ただの警告、target = '_blank'はIE 11のポップアップ防止メカニズムをトリガーします...
RobM

4

これは、iframeでsrc = "image_url"を割り当てたときに発生しました。iframeはそれをドキュメントとして解釈しているようですが、そうではありません。それが警告を表示する理由です。


どのように修正したのですか?iframeを使用するときにここで同じ問題に直面している
Shikha thakur

私はフォームデータを使用し var photoData = new FormData(); 、それからcontentType: false私のajaxリクエストでプロパティを設定しまし た。投稿リクエストは次のようになります:Content-Disposition: form-data;そしてcontent-typeContent-Type: text/html
Carmela

3

adding target="_blank"リンクで問題を解決しました。これにより、クロムは新しいタブを開き、レスポンシブモードでも警告なしにPDFを読み込みます。


私はこれを行い、それはうまくいきました:window.open(href, '_blank');そして新しいタブはダウンロード後に自動的に閉じます。
チャドリチャードソン

1

ASP Webサイトプロジェクトでこの問題が発生しました。「Content-Length」ヘッダーを追加すると、ダウンロードが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に増やしてファイル名を保存し、BLOBを保存する前に長さチェックを実行しました。長さが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タグが誤って設定されたことでした。これは、両方のためのように見えるpdfapplication/x-zip-compressed、あなたはそれを設定することになっているinlineの代わりに、attachment

したがって、ヘッダーを設定するには、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.