不明なファイルタイプMIME?


回答:


184

application/octet-stream不明なタイプに使用できます。

RFC 2046はセクション4.5.1で述べています:

「オクテットストリーム」サブタイプは、ボディに任意のバイナリデータが含まれていることを示すために使用されます。


3
実際、RFCごとに、不明なデータを含むタイプ情報を送信しないでください。RFC-2046は既知のタイプのみを定義していますが、RFC-7231は未知のタイプの処理方法を説明しています。
Sampo Sarrala-codidact.org 2015年

@SampoSarrala RFC-7231を少し違った方法で読みます。「Content-Typeヘッダーフィールドが存在しない場合、受信者はメディアタイプが「application / octet-stream」([RFC2046]、セクション4.5.1)であると想定するか、データを調べてそのタイプを判別してください。」私は、Content-Typeを送信する必要がないか、クライアントがコンテンツ検査で推測ゲームをプレイしないようにする場合は、デフォルトとしてapplication / octet-streamを送信しても安全であると解釈します。
Jpnh

1
@Jpnhはい、そうです。Content-Typeヘッダーは、不明な場合は常に存在しないようにする必要があります。基本的にクライアントに「今すぐ表示したくないが、代わりにこれらのバイトをファイルに保存する」ことを伝えるapplication / octet-streamを送信することもできます。これにより、Webクライアントはファイルを保存できます。オプション1 ==このファイルについて何も知らない。オプション2 ==ファイルの内容をMIMEで記述できないか、ディスクにのみ保存する必要があります。実際には、どちらのオプションも正しいでしょう。混乱を避けるために、もっと良い表現を選ぶべきでした。
Sampo Sarrala-codidact.org 2015年

4
「任意のバイナリデータ」は「不明」ではありません。application / octet-streamを使用することで、コンテンツタイプが既知であり、テキストでも画像でもない任意のバイナリデータであることをブラウザーに通知し、結果としてファイルにダウンロードして実行する必要がある可能性があります。間違っていることに加えて、これはセキュリティホールであり、特にほとんど見えない最新のダウンロードマネージャーを考えると 正解はcontent-typeヘッダーではありません。それがどの種類のファイルかわからない場合は、ブラウザーがそれを知っている可能性があります。特に、使用のコンテキスト(イメージ、ドキュメント、スクリプトなど)がわかっている場合は、推測させてください
FF_Dev

@FF_Devナンセンスだと確信しています。「任意のバイナリデータ」は「実行可能」を意味するものではありません。ブラウザ(またはダウンロードマネージャー)がapplication/octet-streamファイルが実行可能であると想定する必要はありません。また、ブラウザー実行可能ファイルを故意にダウンロードしている場合でも、ユーザーの要求なしにブラウザー「実行」することはありません。実行可能ファイルをダウンロードするだけでは、今すぐ実行したいという意味ではありません。application/octet-streamダウンロード時にファイルを自動的に実行するブラウザが実際にある場合は、その動作を再現する方法と方法を教えてください。今、私はあなたを信じていません。
マークアメリー2018

38

RFCリソース:

質問は明らかにHTTP Content-Typeに関するものだったので、RFC-2046(Media Types)の代わりにRFC-7231(HTTP / 1.1 Semantics and Content)を参照として使用する必要があります。

また、RFC-2046は不明なタイプを明確に定義していませんが、RFC-7231は定義しています。

短い答え:

不明なデータのMIMEタイプを送信しません。
より明確にするために:Content-Typeヘッダーはまったく使用しないでください。

参照:

RFC-7231
ハイパーテキスト転送プロトコル(HTTP / 1.1):セマンティクスとコンテンツ
3.1.1.5。コンテンツタイプ

ペイロード本体を含むメッセージを生成する送信者 は、囲まれた表現の意図されたメディアタイプが 送信者に知られてい
ない限り、そのメッセージにContent-Typeヘッダーフィールドを生成する必要があります(SHOULD)。

そのセクションは、あなたがそれを確実に知らない場合、それを省略するようにあなたに明確に指示します。また、タイプがアプリケーション/オクテットストリームであると受信者が想定することもできますが、それは他の何かである可能性があることも示しています。

それでは何が違うのですか?

RFC-2046
4.5.1。オクテットストリームサブタイプ


「アプリケーション/オクテットストリーム」エンティティを受け取る実装の推奨アクションは、データ
をファイルに入れて、Content-Transfer-Encodingを元に戻したり
、ユーザー指定の入力として使用したりすることです。処理する。

そして、すでに上で述べたように:

RFC-7231
3.1.1.5。コンテンツタイプ

Content-Typeヘッダーフィールドが存在しない場合、受信者は「アプリケーション/オクテットストリーム」
([RFC2046]、セクション4.5.1)のメディアタイプを想定するか、データを調べてそのタイプを決定できます。

結論:

「application / octet-stream」と定義すると、「application / octet-stream」であることがわかります。

あなたがそれを定義しない場合、それはあなたがそれが何であるかを知らず、決定をレシーバーに任せていることを伝えています。


1
この答えは真実で唯一であるため、賛成票を投じる価値があります。さらに、デフォルトで「application / octet-stream」を使用すると、ほとんどのブラウザーがダウンロードをトリガーします。これは、ほとんど目に見えない最新のダウンロードマネージャーを考慮したセキュリティホールです。
FF_Dev 2016年

1
これはHTTPに当てはまりますが、問題はHTTPではなくMIME全般に関するものです。たとえば、電子メールでは、ルールは完全に異なります。また、提案の重複での議論を参照してくださいstackoverflow.com/questions/12539058/...
tripleee

同じ理由で値を上げましたが、FF_Devに同意します。「アプリケーション/オクテットストリーム」であり、ダウンロードをトリガーすることを意図していない限り、「アプリケーション/不明」が必要です。「Content-Disposition」が設定されていない場合にブラウザがファイルをダウンロードしようとしないのは良いことですが、使用するファイル名を設定せずに無計画にファイルをダウンロードしているWebサイトが多すぎます。特に銀行。
justdan23

14

私は好みますapplication/unknownが、結果は確かに同じになりますapplication/octet-stream


17
application / octet-streamの代わりにapplication / unknownを使用できるようにする標準はありますか?
Hendrik Brummermann、

3
ありがとう!application / unknownはうまく機能しています。オクテットストリームは、サンプルのpngファイルでchromeのエラーになります。
fnkr 2013年

10
なぜとしての.pngファイルを提供しますapplication/octet-streamapplication/unknown?彼らが発明した理由がありimage/pngます。
アイディアカピ2014

10
@ jenson-button-eventホイールの再発明とは何の関係もありません。MIMEタイプはインテントを指定します。送信するものがpng画像であることがわかっている場合は、その情報を渡してください。バイトが誤ってjpegを表す場合、アプリケーションはそれが有効なpngではないこと、および他の場所にバグがあることを警告することができます。さらに、すべてのアプリケーションがブラウザほど堅牢でフォールトトレラントであるわけではありません。それらはプログラマーの間違いを修正するように設計されていますが、それは目的だけに近いものではありません。ブラウザは、MIMEタイプを使用する唯一のアプリケーションではありません。
アイディアカピ2015年

2
あなたの参照は何ですか?不明なタイプは、ファイルの内容や状態に関する情報を提供していません。または、バイナリまたはテキストベースであっても、プロダクションコードとしてはあいまいであり、小規模なプロジェクトでは問題ないかもしれません。 OSのハンドラー、それは基本的にダウンロード可能なバイナリであり、不明なタイプはアクションを割り当てることができるWindows OSの既知のハンドルです(たとえば、メモ帳で不明なファイルを開く)。悪い習慣ですが、これと組み合わせて不明なタイプを使用して、実行をスキップすることができます:/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.