IEの不思議
今日気が付いたIEの謎(IE 5.50で確認)
以下のような内容のファイル 「test.txt」 をWebサーバ上に置いて、Internet Explorerでアクセスすると、 どうなると思いますか?
GIF89って最初に書いたけど、 これはテキストファイルだよね?
拡張子.txtなので、通常Webサーバ上で Content-Type: text/plainが付与され、 ブラウザはそれを見てtext/plainだと認知し、 ブラウザ上に表示する。 あるいはブラウザで設定されたような挙動をする。 ってのが正しい動き。
実際、Telnetでhttpポートを叩いてみると、 正しくContent-Typeが付与されていることがわかる。 これはまったく問題ない。
$ telnet localhost 80 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. GET /~miyamae/test/test.txt HTTP/1.0 HTTP/1.1 200 OK Date: Mon, 27 Nov 2000 08:55:34 GMT Server: Apache/1.3.11 (Unix) Last-Modified: Mon, 27 Nov 2000 08:48:59 GMT ETag: "73eb3-3d-3a221ffb" Accept-Ranges: bytes Content-Length: 61 Connection: close Content-Type: text/plain GIF89って最初に書いたけど、 これはテキストファイルだよね? Connection closed by foreign host.
しかしっ!! これを受け取ったIEの挙動はどうでしょう? これがなんと、テキストではなくGIF画像として認識されてしまうのだ。 ブラウザには画像がロードできなかった旨の「×」マークが表示されてしまう!! もちろん拡張子.htmlファイルでも同じである。 (もっともHTMLファイルでは先頭にGIF89とか書くのは文法違反だけどね)
どうやらIEではファイルの先頭にGIF89と書いてあると、 Content-Typeを無視してGIFとして表示しようとしている模様。 この調子ではおそらく他にも、 Content-Typeを無視するケースがるのではないかと思われる。 ちょっと怖い。 指定が無かった場合に補完するのなら、まだ理解できないこともないのだが、 わざわざ指定しているものを無視するなよー。 まったく、なんちゅー実装だか。
もちろんNetscapeでは正しくテキストとして表示される。 ていうかテキストファイルなんだしMIMEタイプもtext/plainなんだから当然である。
ちなみにローカルファイルの場合は拡張子で判別されるようなので、 問題なくテキストとして表示される。