大破ログ

日々大破、それと側転少々。PC関連その他、気になったことなどをつらつらと。

IEでOpenWrtのtrxファイルのMIMEが誤判定される

前回の記事で、WZR-900DHP用OpenWrtファームを独自に修正してビルドし、大破.netにアップロードしたことを報告しました。が、MIMEを登録していなかったせいでダウンロードできない状態になっていました。ごめんなさい。(IISの仕組み上、404が出ていた)

しかし今回は、WebサーバのIISにただMIMEを追加しただけではダメ(ファイルがIE上で直接オープンされてしまう)な場合があることが発覚しました。 結論を先に言ってしまうと、Visual Studio Test Results Fileを扱えるVisual StudioをインストールしたPCで、IEを使用してOpenWrtファームの .trxファイルをダウンロードした場合” です。

この「Visual Studio Test Results File」は、拡張子がWZR-900DHP等のOpenWrtファームと同じ ”.trx” で、これが原因でIEMIMEの誤判定を起こしてしまうようです。

管理人のWindows 10のPCで何となくWZR-900DHP用ファームのダウンロードをしてみたところ、よくzipファイルなどをダウンロードするときのようなそのまま開くか、それとも保存するか聞いてくるダイアログやバーが出ず、バイナリファイルがそのままブラウザ上で表示されてしまったことで問題が発覚しました。

WebサーバのWindows Server 2012上のIISでは既にMIMEを " application/octet-stream " で追加済みで、同じMIMEの拡張子が " .bin " のOpenWrtファームは全く問題なくダウンロードできます。少し検索してみても、MIMEが " application/octet-stream " であれば、基本ダウンロードが行われる様子。

そこで調べてみたところ、IEではMIMEを認識する際、単純にファイルの拡張子だけで判定するのではなく、いくつかのステップを踏んで判定されるとのこと。

参考:IEのMIME Sniffing - てきとうなメモ

上記のブログを見てみると、判定のステップでまず当てはまるのが "2.Content-Typeが既知もしくは曖昧なMIME Typeならば,ファイルの中身を調べて自動判定した結果が最終的なMIME-Typeになる" というもの。 管理人のPCでは、前述の通りのVisual Studioがインストールされているため、" .trx" は "Visual Studio Test Results FIle" としてレジストリに登録されていて、Content Typeは "application/xml" でXML扱いです。もちろんXMLMIMEタイプは "text/xml" で既知のMIME Typeであり、これは問題なくIE上でオープンできます。

これを元に、再びIEでOpenWrtの .trxファイルを確認のためダウンロードしようとしてみたところ、やはり "Visual Studio Test Results FIle" として判定されてしまっていました。 openwrt_trx-iis_missing

そこで、上記のブログで別の記事

IE8のMIME処理 - てきとうなメモ

に掲載されているIE8からの変更点 "•X-Content-Type-Optionsヘッダにnosniffを指定すると自動検出しなくなる" を試してみます。

Internet Information Service Managerを開き、ユーザーにダウンロードさせたいファイルの存在するディレクトリ(サイト全体に適用したい場合は、サイトのホームでも可)のホーム画面で "HTTP 応答ヘッダー" を開きます。 右ペインの "追加..." から "カスタム HTTP 応答ヘッダーの追加" を開き、以下のように記述します。

  • 名前(N):X-Content-Type-Options
  • 値(V):nosniff

その後しばらくすると、OpenWrtの .trxファイルをIEでダウンロードしようとした際に勝手にブラウザ上で開かれず、保存するかどうか聞いてくるようになります。

ちなみに、上記ブログに掲載されている "•X-Download-Optionsヘッダにnoopenを指定すると勝手にそのファイルを開かず、保存するかどうか問い合せてくる" をnosniffと同様にIISに追加すると、保存するか聞いてくるバーに "ファイルを開く(O)" ボタンが表示されなくなります。OpenWrtの .trxファイルはバイナリファイルなので、このHTTP応答ヘッダも追加しておくのがいいかも。

それと、この問題はOpenWrt公式サイトのダウンロードページでも発生していました。

以上、大コケしたので備忘録代わりに。