Svg Header Problem

Updated: 2003-07-01 20:58:58 - [ Home | Wiki Home | Index | Changes ]

IE+SVGViewerが、Content-Typeヘッダのcharsetに影響されているらしい問題についてのメモです。

目次

問題の概要
確認した現象
確認した環境
対策(Tomcat 4.1.12では問題解決)
テストファイル

問題の概要

SVGファイルにIEでアクセスした際、SVGViewerで開かずにダウンロードのダイアログが出ることがあるようです。これは、HTTPヘッダーのcharsetの指定の有無に影響されているようです。

確認した現象

HTTPヘッダが以下の場合はSVGViewerで開きますが、

Content-type: image/svg-xml

以下の場合にはSVGViewerでは開かずにダウンロードとして扱われてしまいました。

Content-type: image/svg-xml;charset=UTF-8

IE・SVGViewerのどちらが問題なのかは不明です。

確認した環境

対策(Tomcat 4.1.12では問題解決)

Tomcat 4.0.4は、Content-typeにcharsetを自動的に付けてくれます。このため、サーバでSVGを生成しても、ブラウザで表示することが(実質的に)不可能になっています。Tomcatの該当するソース(org.apache.catalina.connector.ResponseBase)を眺めてみましたが、charsetを外すことはできない感じがしました。

response.setContentType("image/svg-xml;");

みたいに最後にセミコロンをつけてごまかす姑息な方法を試してみましたが(これだとcharsetはつかなくなります)、SVGViewerは開いてくれませんでした。

HTMLにエンベッドしてみましたが同じでした。ヘッダにcharsetがあるときはエンベッドできません。

ということで、困り中です。

   

同じ症状で困っているという方からメールをいただいたので、もう一度考えてみました。Tomcat4にはヘッダのcharsetを消す設定はないようですが、Filterを使うとヘッダを書き換えられるんじゃないでしょうか。やったことないのでたぶんですけど。

   

解決しました。普通に

response.setContentType("image/svg-xml");

で、いけるということをメールで教えていただきました。

Tomcat 4.0.4ではsetContentTypeを使ってもcharsetが自動的に付いていたのですが、4.1.12ではcharsetが外れるみたいです。これでひとまず問題解決です。ありがとうございました。

あと、上で「Tomcat 4」は、charset消せないとかいい加減な書きかたをしてました。スイマセン。

   

せっかくなので他のバージョンでも確認してみました。

<% response.setContentType("text/plain"); %>
OK

が書かれたJSPにアクセスしてヘッダを見てみました。4.0の現在の最新版4.0.6だと、

HTTP/1.1 200 OK
Content-Type: text/plain;charset=ISO-8859-1
Connection: close
Date: Tue, 01 Jul 2003 11:49:04 GMT
Server: Apache Tomcat/4.0.6 (HTTP/1.1 Connector)
Set-Cookie: ...

4.1で一番古いリリース4.1.2 alphaでは、

HTTP/1.1 200 OK
Content-Type: text/plain
Set-Cookie: ...
Date: Tue, 01 Jul 2003 11:54:42 GMT
Server: Apache Coyote HTTP/1.1 Connector [1.0]
Connection: close

ということで、4.1でcharsetを自動で付けるかどうかが変わったみたいです。

テストファイル

以下の2つのCGIで確認しました。違いはcharsetの有無だけです。



KOSEKI Kengo <kengo@tt.rim.or.jp>