ファイルのダウンロードにはContent-Type: application/octet-streamが必要ですか? 質問する

ファイルのダウンロードにはContent-Type: application/octet-streamが必要ですか? 質問する

HTTP 標準言う:

このヘッダー [Content-Disposition: attachment] が application/octet-stream コンテンツ タイプを持つ応答で使用される場合、暗黙の提案として、ユーザー エージェントは応答を表示せず、直接「応答を名前を付けて保存...」ダイアログを入力する必要があります。

私はそれを次のように読みました

Content-Type: application/octet-stream
Content-Disposition: attachment

しかし、それは、、、などContent-Typeであると考えていました。application/pdfimage/png

Content-Type: application/octet-streamブラウザでファイルをダウンロードしたい場合は必要ですか?

ベストアンサー1

いいえ。

コンテンツ タイプは、それが何であるかがわかっている場合は、application/octet-streamそれが何であるかをそのまま使用してください。RFC 2046 では「任意のバイナリ データ」として定義されており、ディスクに保存されることを唯一の目的とし、その時点から「Web 的」なものの外側にあるエンティティに適しているという点で、ここでは明確な重複があります。または、別の観点から見ると、application/octet-stream で安全に実行できる唯一のことは、それをファイルに保存し、他の誰かがその目的を知っていることを期待することです。

Content-Dispositionを や などの他のコンテンツ タイプと組み合わせて使用​​することで、表示するのではなく保存することを示すこともできます。 の場合、一部のブラウザーではこれを無視することがありましたimage/pngが、これはかなり昔のことだと思います (もうすぐ寝るので、今すぐにブラウザーを大量にテストし始めるつもりはありません。後になるかもしれません)。text/htmltext/html

RFC 2616 では、拡張トークンの可能性についても言及しており、最近ではほとんどのブラウザが、inline可能であればエンティティを表示する (つまり、ブラウザが表示方法を知っているタイプである場合、そうでない場合は選択の余地がない) という意味であると認識しています。これはもちろんデフォルトの動作ですが、filenameユーザーが保存しようとしたときにブラウザが提案として使用するヘッダーの部分を含めることができることを意味します (ファイル拡張子が問題のコンテンツ タイプのローカル システム標準と一致するように調整される場合もありますが、そうでない場合もあります)。

したがって:

Content-Type: application/octet-stream
Content-Disposition: attachment; filename="picture.png"

「これが一体何なのかわかりません。ファイルとして保存してください。できれば picture.png という名前にしてください」という意味です。

Content-Type: image/png
Content-Disposition: attachment; filename="picture.png"

「これは PNG 画像です。ファイルとして保存してください。できれば picture.png という名前を付けてください」という意味です。

Content-Type: image/png
Content-Disposition: inline; filename="picture.png"

「これは PNG 画像です。PNG 画像の表示方法がわからない場合は、そのまま表示してください。それ以外の場合、またはユーザーが保存することを選択した場合は、保存するファイルの名前として picture.png を使用することをお勧めします」という意味です。

認識するブラウザの中には、inline常にそれを使用するものもあれば、ユーザーが「リンクを名前を付けて保存」を選択した場合にそれを使用するが、閲覧中に「保存」を選択した場合には使用しないものもあります (少なくとも IE は以前はそうでしたが、数年前に変更された可能性があります)。

おすすめ記事