1. ホーム
  2. http

[解決済み] ファイルのダウンロードにContent-Type: application/octet-streamは必要ですか?

2022-03-19 18:53:50

質問

その HTTP規格 と書いてあります。

このヘッダー [Content-Disposition: attachment] がレスポンスで使用されている場合 で、content-typeがapplication/octet-streamの場合、暗黙の了解として ユーザーエージェントは応答を表示せずに を直接入力し、'save response as...'ダイアログを開きます。

と読みます。

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

しかし、私はてっきり Content-Type となる application/pdf , image/png など。

とする必要があります。 Content-Type: application/octet-stream ブラウザにファイルをダウンロードさせたい場合は?

解決方法は?

いいえ。

content-typeは、それが分かっているのであれば、何でも良いはずです。 application/octet-stream はRFC2046で「任意のバイナリデータ」と定義されており、ディスクに保存されることのみを目的としたエンティティに適しており、その時点から「ウェブ的なもの」からは外れているという明確な重なりがあります。アプリケーション/オクテットストリームで安全にできる唯一のことは、それをファイルに保存して、それが何のためにあるのか誰かが知っていることを願うことです。

を組み合わせて使用することができます。 Content-Disposition のような他のコンテンツ-タイプとの image/png あるいは text/html で、表示ではなく保存であることを示します。以前は、いくつかのブラウザが text/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は以前はそうでした。)