2000/11/27

今日気が付いた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なんだから当然である。

ちなみにローカルファイルの場合は拡張子で判別されるようなので、 問題なくテキストとして表示される。