URL-Rewriting問題
初回アクセス時に
色々調べた結果、javax.servlet.HttpServletResponse#encodeURL()が諸悪の根元のようです。このメソッドの中でCookieの有無を調べ、存在しない場合はURLにセッションIDを付加するという処理が行われています。
結局、「Cookieが送られてこなかったら、そのリクエストに対するレスポンスコンテンツに含まれるリンクにはセッションIDを付加することでセッションを維持しよう」というJava Servletの設計思想のせいです。たしかにCookieをサポートしないクライアント(携帯電話とか)に対しては有効な方法だとは思いますが、そのためにセッションIDが漏洩するリスクを抱えてしまっているわけで、どうも納得がいきませんね。少なくとも、URL-Rewritingをオフにする手段は提供してほしいものです。
ところで、";jsessionid=xxx"の先頭のセミコロンがずっと気になっていたのですが、HTTPのリクエストURL表記において、";"(セミコロン)で連結するのは"parameter"、"?"(クエスチョンマーク)で連結されるのは"query"と呼ぶのだそうですね。恥ずかしながら初めて知りました。
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ ";" parameter ] [ "?" query ]]
こんな感じですね。