image/x-png の ContentType について

image/x-png の ContentType について
これにより、png ファイルのアップロードも不可能になりました (後で情報を調べたところ、レジストリの場所が間違っていたことに気付きました)。私自身のテストの結果は次のようになりました。

IE6

インターネットエクスプローラー8.0

クロム

ファイアフォックス

png

画像/x-png

画像/x-png

画像/png

画像/png

jpg

画像/pjpeg

画像/jpeg

画像/jpeg

画像/jpeg

jpeg

画像/pjpeg

画像/pjpeg

画像/jpeg

画像/jpeg

ビットマップ

画像/bmp

画像/bmp

画像/bmp

画像/bmp

比較すると、Chrome と FireFox によって反映される ContentType は、実際の回答とより一致しています。では、なぜこのような違いがあるのでしょうか?

  1. まず、MIME タイプについて説明します。

MIME タイプは、特定の拡張子を持つファイルを特定のアプリケーションで開くように設定する方法です。この拡張子を持つファイルにアクセスすると、ブラウザは自動的に指定されたアプリケーションを使用してファイルを開きます。これは主に、クライアント定義のファイル名とメディア ファイルの開き方を指定するために使用されます。

MIME の英語での正式名称は、「Multipurpose Internet Mail Extensions」です。これは多目的インターネット メール拡張プロトコルです。1992 年に初めて電子メール システムに適用されましたが、後にブラウザーにも適用されました。サーバーは送信するマルチメディア データの種類をブラウザーに通知します。通知方法は、マルチメディア データの MIME タイプを説明することです。これにより、ブラウザーは受信した情報のうちどれが MP3 ファイルで、どれが Shockwave ファイルであるかなどを認識します。サーバーは送信データに MIME 識別子を配置し、関連付けられたファイルを読み取るためにどのプラグインを使用するかをブラウザに通知します。

MIME は、非 ASCII 文字やバイナリ添付ファイルなど、さまざまな形式の電子メール メッセージをサポートできます。この標準は、RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049 などで定義されています。 RFC 822 から派生した RFC 2822 では、電子メール標準では電子メール メッセージで 7 ビット ASCII 文字セット以外の文字の使用は許可されないと規定されています。このため、英語以外の文字メッセージや、バイナリ ファイル、画像、サウンドなどのテキスト以外のメッセージは、電子メールでは送信できません。 MIME は、さまざまなデータ型を表すための記号的な方法を指定します。

ブラウザはファイルを受信すると、プラグイン システムに入り、受信したファイルを認識して読み取ることができるプラグインを検索します。ブラウザがどのプラグイン システムを呼び出すべきかわからない場合、プラグインが見つからないことをユーザーに通知するか、または既存のプラグインを選択して受信したファイルを読み取ろうとする可能性があり、その結果システムがクラッシュする可能性があります。送信された情報に MIME 識別子が含まれていない場合にどのような結果が生じるかを予測することは困難です。一部のコンピュータ システムでは問題が発生しないかもしれませんが、その結果一部のコンピュータがクラッシュする可能性があるためです。

出力がブラウザに送信されると、ブラウザは出力ドキュメントを処理するために適切なアプリケーションを起動する必要があります。これは、さまざまな種類の MIME (Multipurpose Internet Mail Extensions) を使用して実行できます。 HTTP では、MIME タイプは Content-Type ヘッダーで定義されます。

たとえば、Microsoft Excel ファイルをクライアントに送信するとします。このときの MIME タイプは「application/vnd.ms-excel」です。ほとんどの場合、このファイルは処理のために Excel に渡されます (特定の MIME タイプを処理するアプリケーションとして Excel を設定していると仮定)。 ASP では、MIME タイプを設定する方法は、Response オブジェクトの ContentType プロパティを通じて行われます。

  1. IE での MIME タイプの解析:

Microsoft Internet Explorer 4.0 以降では、MIME タイプの判別は URL モニカーのFindMimeFromDataメソッドを通じて行われます。 MIME タイプを識別すると、URL モニカやその他のコンポーネントは、関連するコンテンツを処理するために適切なオブジェクト サーバーまたはアプリケーションを見つけて起動できるようになります。

サーバーから提供されたMIMEタイプ(利用可能な場合)

ダウンロードしたURLに関連付けられた実際のコンテンツの調査

ダウンロードされたコンテンツに関連付けられたファイル名(関連付けられた URL から派生したものと想定されます)

ダウンロード中に有効なレジストリ設定(ファイル名拡張子/MIMEタイプの関連付けまたは登録されたアプリケーション)

レジストリの場所

FindMimeFromData がファイル名拡張子から MIME タイプと progID を見つけるために使用する場所:

HKEY_CLASSES_ROOT\.***
FindMimeFromData が progID からアプリケーションを検索するために使用する場所:

HKEY_CLASSES_ROOT\<ProgId>\shell\open\command
URL モニカーが MIME タイプから CLSID を見つけるために使用する場所:

HKEY_CLASSES_ROOT\MIME\データベース\コンテンツタイプ

MIME タイプ検出、つまりデータ スニッフィングの目的は、次の 4 つのソースからの情報を使用して、ダウンロードされたコンテンツの MIME タイプ (コンテンツ タイプまたはメディア タイプとも呼ばれます) を判別することです。

具体的な情報については、MSDN ドキュメントを参照してください。

MIME タイプ検出アルゴリズム、FindMimeFromData 関数、およびアップロードされた MIME タイプ セクションの詳細については、 http://msdn.microsoft.com/zh-cn/library/ms775147 (v=VS.85).aspx を参照してください。

  1. image/x-png の前に x- が付いているのはなぜですか?

インターネットには標準の MIME タイプを確認するための特別な組織である IANA がありますが、インターネットは急速に発展しており、多くのアプリケーションでは、使用する MIME タイプが標準タイプであることを IANA が確認するまで待つことができません。そのため、このカテゴリがまだ標準になっていないことを示すために、カテゴリを x- で始める方法が使用されます (例: x-gzip、x-tar など)。実際、これらのタイプは非常に広く使用されており、事実上の標準となっています。クライアントとサーバーの両方が MIME タイプを認識できる限り、非標準のタイプであっても問題ありません。クライアントプログラムは、MIME タイプに基づいて特定の処理方法を使用してデータを処理できます。 Web サーバーとブラウザー (オペレーティング システムを含む) では、標準および一般的な MIME タイプがデフォルトで設定されています。一般的でない MIME タイプの場合のみ、識別のためにサーバーとクライアント ブラウザーの両方を設定する必要があります。

image/x-png に関する議論はhttp://stackoverflow.com/questions/2086374/what-is-the-difference-between-image-png-and-image-x-pngにあります。

<<:  Docker 可視化グラフィックツール portainer の詳細な説明

>>:  MySQL の削除に基づく構文エイリアスの問題

推薦する

Mysql: 定義者として指定されたユーザー ('xxx@'%') が存在しません 解決策

本日のプロジェクト最適化中に、MySQL に問題が発生しました: 定義者として指定されたユーザー (...

MySQL SHOW PROCESSLISTはトラブルシューティングの全プロセスを支援します

1. SHOW PROCESSLISTコマンドSHOW PROCESSLIST は実行中のスレッド ...

CSS3 ベジェ曲線の例: リンクホバーアニメーション効果の作成

CSS3 アニメーション トランジションを使用して、リンクの上にマウスを移動すると小さなポップアップ...

ウェブページの内部アンカーポイントを実現するための純粋なCSSの上下オフセットコード例

最近、「フットボール ナビゲーション」Web サイトに取り組んでいるときに、上部の固定ナビゲーション...

テーブルを使用してフォームコントロールの形式を調整し、見栄えを良くします。

自分でウェブページを書きたいので、HTML 言語についても少し勉強しています。これは、大学時代にウェ...

Nginx ロードバランシングとは何か、そしてそれをどのように設定するか

負荷分散とは負荷分散は主に、専用のハードウェア デバイスまたはソフトウェア アルゴリズムによって実現...

Vue3はCSSの無限シームレススクロール効果を実装します

この記事では、CSS無限シームレススクロール効果を実現するためのvue3の具体的なコードを参考までに...

Linux での Docker のインストールと展開の例

以下の記事を読んだ後、プロジェクトをサーバーにデプロイできます。Tomcat、JDK、MySQL な...

面接官はReactのライフサイクルについてよく質問します

ReactライフサイクルReactのライフサイクルを理解するのに役立つ2つの図React ライフサイ...

Linux でユーザー アカウントをロックおよびロック解除する 3 つの方法

組織内で何らかのパスワード ポリシーがすでに実装されている場合は、この記事を読む必要はありません。た...

Linux で指定された期間に数分ごとにタスク スケジュール crontab を自動的に実行する方法

まずコードを見てみましょう #/bin/sh datename=$(日付 +%Y%m%d-%H%M%...

トラフィックの多いウェブサイト向けのソリューション

まず、サーバーのハードウェアが現在のトラフィックをサポートするのに十分かどうかを確認します。通常の ...

CSS3アニメーションとHTML5の新機能の詳しい説明

1. CSS3アニメーション☺CSS3 アニメーションは、JavaScript を介して要素のスタイ...

MySQLはランダムに一定数のレコードを抽出します

以前は、このような使用シナリオを処理するために rand() で直接 order していましたが、効...