番号。
content-typeは、わかっている場合は、それがわかっているものである必要があります。application/octet-stream
はRFC 2046で「任意のバイナリデータ」として定義されており、その唯一の意図された目的がディスクに保存されるエンティティに適切であり、その時点から「webby」の外側にあるという明確な重複があります。または、別の方向から見ます。application / octet-streamで安全にできる唯一のことは、それをファイルに保存し、誰かがそれが何のためにあるか知っていることを望んでいることです。
あなたはの使用組み合わせることができ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は以前はそうでしたが、数年前に変更された可能性があります)。