Updated: 2003-07-01 20:58:58 - [ Home | Wiki Home | Index | Changes ]
IE+SVGViewerが、Content-Typeヘッダのcharsetに影響されているらしい問題についてのメモです。
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.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の有無だけです。