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 の削除に基づく構文エイリアスの問題

推薦する

Vue px to rem 構成の詳細な説明

目次方法1 1. 構成とインストールの手順:方法2方法3要約する方法1 1. 構成とインストールの手...

HTML 9グリッドレイアウトの実装方法

ウェブサイトのレイアウトの多様化は、当社のフロントエンドの得意分野です。最近、UC ブラウザのデフォ...

JavaScript の 3 つの BOM オブジェクト

目次1. 場所オブジェクト1. URL 2. 場所オブジェクトのプロパティ3. ロケーションオブジェ...

TypeScript 学習ノート: 型の絞り込み

目次序文型推論真理値の絞り込み平等の縮小演算子の絞り込みインスタンスの絞り込み狭まりの本質ユニオン型...

MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)

開発の背景:最近、私はバッチ データを MySQL データベースにインポートする機能に取り組んでいま...

Docker 階層化パッケージを使用して Spring Boot を設定する方法

Spring Boot プロジェクトでは、Docker コンテナ、jar、war の階層化パッケージ...

CSS3 引用のソースと出典をマークする方法

疫病のせいで家にこもりきりで、頭がおかしくなりそうなので、パソコンを起動して頭を働かせてみました。今...

VMware ワークステーション 12 に Ubuntu 14.04 (64 ビット) をインストール

1. インストール環境コンピュータモデル: Lenovo Y471a (i5) ノートパソコンシステ...

MySQL で特定の親行のすべての子行を見つけるソリューション

序文注: テストデータベースのバージョンはMySQL 8.0ですテーブルを作成し、ユーザー scot...

Nginxはctxを使用してデータ共有とコンテキスト変更機能を実現します。

環境: init_worker_by_lua、set_by_lua、rewrite_by_lua、a...

Linux の Centos7 に Mysql5.7.19 をインストールする詳細なチュートリアル

1. MySQLをダウンロードするURL: https://dev.mysql.com/downlo...

仮想マシンに Linux rhel7.3 オペレーティング システムをインストールする (具体的な手順)

仮想化ソフトウェアをインストールする仮想マシンにオペレーティング システムをインストールする前に、ホ...

色の16進数カラーコード表表示と16進値の比較表示で簡単に検索できます

さまざまな色の16進コード表[パート1] 赤とピンク、およびそれらの 16 進コード。 #99003...

Baotaパネルを再起動すると、「-ModuleNotFoundError: No module named 'geventwebsocket'」というメッセージが表示されます。

背景:サーバーがFlaskプロジェクトをデプロイし、python3をインストールしたため、再起動時に...

MySQL の null と not null、null と空の値の違いの詳細な説明 ''''

MySQL を長い間使用してきた多くの人は、これら 2 つのフィールド属性の概念をまだよく理解して...