web-dev-qa-db-ja.com

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

アップロードされたファイルに拡張子がない場合、MIMEタイプを指定する必要がありますか?言い換えれば、デフォルトの一般的なMIMEタイプはありますか?

130
Shimmy

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

RFC 2046 セクション4.5.1の状態:

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

168
Bombe

RFCリソース:

質問は明らかにHTTP Content-Typeに関するものだったため、RFC-2046(メディアタイプ)の代わりにRFC-7231(HTTP/1.1セマンティクスとコンテンツ)を参照として使用する必要があります。

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

簡潔な答え:

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

参照:

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

ペイロード本体を含むメッセージを生成する送信者
そのメッセージにContent-Typeヘッダーフィールドを生成します
同封された表現の意図されたメディアタイプは、
送信者。

このセクションでは、確かにわからない場合は、除外するように指示しています。また、受信者は、タイプがapplication/octet-streamであると想定できることを伝えますが、問題はそれが何か他のものであるかもしれないということです。

何が違うの?

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

を受け取る実装に推奨されるアクション
「application/octet-stream」エンティティは、単にデータの配置を提案することです
Content-Transfer-Encodingを元に戻したファイル内、または
ユーザー指定のプロセスへの入力として使用します。

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

RFC-7231
.1.1.5。Content-Type

Content-Typeヘッダーフィールドが存在しない場合、受信者は「application/octet-stream」のメディアタイプを想定できます。
([RFC2046]、セクション4.5.1)またはデータを調べてそのタイプを判別します。

結論:

これを「application/octet-stream」と定義すると、「application/octet-stream」であることを知っていると伝えられます。

定義しないと、あなたはそれが何であるかわからないことを伝え、受信者に決定を任せ、受信者はそれがアヒルのように歩くかどうかを確認できます...

34
Sampo Sarrala

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

13
Lada