IE だとダウンロードできない現象を調べてみる修行

調査依頼。ZenCart ベースのシステムの管理機能で、Firefox だと CSV がダウンロードできるのに、IE だとできない。
「このインターネットのサイトを開くことができませんでした。要求されたサイトが使用できないか、見つけることができません。後でやり直してください。」なエラーメッセージなので、リクエスト URL がくさってるんだろうと、Fiddler でひっかけたが、レスポンスが戻ってきている。

どうやら SSL なページで起こっているらしいということで、ググって見たところ Microsoft も認識している IE の問題のようだ。
Fiddler で Cache-Control ヘッダと Pragma ヘッダをいじってみたら、ダウンロードしたファイルを保存できた。

解決策としては、

  1. 問題の生じないブラウザを利用する
    1. IE 以外を使う
    2. 問題の生じない IE か、パッチを当てた IE を使う
  2. 当該レスポンスの Cache-Control ヘッダに no-store, no-cache を入れないようにする
  3. POST でダウンロードさせるのをやめる

だろうか。

2 については、PHP の場合、http://d.hatena.ne.jp/unau/20070718/1186888442 な対応をすることになると思われる。ZenCart の場合、独自に Pragma ヘッダをいじっているという噂もある。

先に挙げた Microsoft のページでは、この問題の回避策として href を利用しな、と書いてある。GET リクエストを利用せよ、ということと解釈した。
今回問題が起きたダウンロード機能では、フォームでさまざまな条件を指定してデータをダウンロードしていた。普通に考えて情報を取ってくるのだから GET リクエストが適切であり、POST していること自体が間違いではないだろうか。

関係ないが、Content-Type が "plain" になっていた。"text/plain" か "application/octet-stream" が適切ではなかろうか。もしかして plain ってのもあるんだろうか。今度 RFC & IANA を当たってみよう。