Version2.8.1

Version2.8.1(20100205)

リリース日: 2010年2月5日

Version2.8.0(20090618)からの変更点です。

機能追加/変更

  • XHTMLコンテンツを変換させた場合のパフォーマンスを改善 [詳細]
  • XHTMLコンテンツでCSSプロパティ名が大文字で記述されていても認識するように変更 [詳細]
  • XHTMLコンテンツで擬似リンク属性の値の末尾に";"が無くても変換するように変更 [詳細]
  • <input>タグにx-Servlet独自属性"halflength"を追加 [詳細]
  • ページ内リンクをスルー出力する動作設定を追加 [詳細]
  • ページ内に同じ名前の画像ファイル(スペーサー画像など)が存在した場合はセッションパラメータも同一となるように変更 [詳細]
  • 元コンテンツを取得する際のAcceptヘッダの値を "*.*" から、一般的な "*/*" へ変更 [詳細]
  • xproxy.propertiesの設定項目"inputValueSanitizing"のデフォルト値を"false"から"true"へ変更 [詳細]

機能修正

  • 元コンテンツがUTF-8の場合に、一部の文字が"?"と表示される不具合を修正 [詳細]
  • XHTMLコンテンツにおける<a>タグの"id"属性変換不具合を修正 [詳細]
  • JDK1.6系を使用した環境で画像変換機能を使用するとメモリリークが発生する不具合を修正 [詳細]
  • Keep-Alive を使用した場合、特定のタイミングでリクエストが受け付けられなくなる不具合を修正 [詳細]
  • XHTML変換時に、特定のタイミングにおいてCSS変換エラーが発生する不具合を修正 [詳細]
  • xproxy.properties の sessionRefreshInterval と cacheRefreshInterval の設定が反映されなかった不具合を修正 [詳細]
  • JAI で発生するメモリリークに対応するための JVM オプションを追加 [詳細]

マニュアル変更

  • 機能追加/変更に伴う設定内容を追加
  • 変更情報の詳細ページを追加
  • JAI利用時の注意事項ページを追加

XHTMLコンテンツを変換させた場合のパフォーマンスを改善

XHTMLコンテンツを変換させた場合のCPUリソースが軽減されました。
これにより多くのリクエストを処理できるようになりましたので1台あたりのアクセス件数が伸びる可能性があります。

結果としてより多くのメモリを必要とする場合がありますのでメモリ不足に注意してください。

XHTMLコンテンツでCSSプロパティ名が大文字で記述されていても認識するように変更

XHTMLコンテンツでCSSプロパティを大文字で記述していた場合、無効となっていたCSSプロパティが有効となります。
また、x-Servlet が変換して出力するとCSSプロパティは全て小文字となります。

※Version2.8.0 で大文字・小文字が混在しているコンテンツを使用していた場合、従来では削除されていた大文字のプロパティもVersion2.8.1では有効となりますので注意してください。

コンテンツ例

<div style="FONT-SIZE:xx-small;background-color:#000000;">

Ver2.8.0 での変換結果

<div style="background-color:#000000;">

Ver2.8.1 での変換結果

<div style="font-size:xx-small;background-color:#000000;">

XHTMLコンテンツで擬似リンク属性の値の末尾に";"が無くても変換するように変更

XHTMLコンテンツで <link> のCSS値の末尾にセミコロンを指定していなくてもリンク色、訪問済みリンク色、フォーカスリンク色の指定が有効になります。

※コンテンツ中にセミコロン抜けの記述が混在していた場合、Version2.8.1 で有効になるためリンクに色が付くことになります。

コンテンツ例
<style type="text/css">
  <![CDATA[
  a:link{color:#FF0000}   ←
  a:focus{color:#0000FF}  ← セミコロンが抜けている
  a:visited{color:#00FF00} ←
  ]]>
</style>
Ver2.8.0 での変換結果
<style type="text/css">
</style>
Ver2.8.1 での変換結果
<style type="text/css">
  <![CDATA[
  a:link{color:#FF0000;}
  a:focus{color:#0000FF;}
  a:visited{color:#00FF00;}
  ]]>
</style>

ページ内リンクをスルー出力する動作設定を追加

コンテンツ内に配置されたページ内リンクはx-Servletを経由すると自ページURLの外部リンクとなってしまいます。
これはページ分割された場合でも正しくジャンプするために必要な措置ですが場合によっては外部リンクにしたくないケースがあります。

xproxy.properties の fragmentThrough を "true" に設定することで <a> タグ内がアンカーの場合は無変換となります。

アンカーかどうかの判断は href属性の値が"#"で始まっているかで決定されます。
したがって、ファイル名+#アンカー名 のような外部アンカーは従来通り変換されます。

例:
<a href="#TOP">      → 変換されない。
<a href="/top.html#TOP"> → 変換される。

また、対象となるのは href 属性のみです。他の属性(accesskey など)は従来通り変換が行われます。

※この設定はコンテンツ全体に対して有効になります。
※この設定を有効にした状態でページ分割が発生した場合、ページ内リンクが異なるページに分割されますのでリンク先にジャンプできなくなります。

ページ内に同じ名前の画像ファイル(スペーサー画像など)が存在した場合はセッションパラメータも同一となるように変更

コンテンツ内で装飾用画像やレイアウト調整用のスペーサー画像(透過gif)など、1ページ内で同一ファイル多用するケースがある場合、従来のバージョンではファイルごとに異なるセッションパラメータの値を付加していたためブラウザから画像の個数分だけリクエストが発生します。

xproxy.properties の supportsSpacerImg を "true" に設定することで同一ファイル名の場合は同じセッションパラメータを付加します。
これによりブラウザ側のキャッシュにより同一ファイルへのリクエストが1回で済みます。

コンテンツ例
<img src="./img/line.gif"><br>
<img src="./img/sp.gif"><br>
<img src="./img/sp.gif"><br>
<img src="./img/sp.gif"><br>
<img src="./img/sp.gif"><br>
<img src="./img/line.gif"><br>
supportsSpacerImg="false"
<img src="./img/line_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.bfJ6V-0.g"><br>
<img src="./img/sp_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.4QzHc-0.g"><br>
<img src="./img/sp_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.oTX1t-0.g"><br>
<img src="./img/sp_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.5B9IJ-0.g"><br>
<img src="./img/sp_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.rgq2i-0.g"><br>
<img src="./img/line_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.NJ7Bj-0.g"><br>
supportsSpacerImg="true"
<img src="./img/line_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.bfJ6V-0.g"><br>
<img src="./img/sp_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.4QzHc-0.g"><br>
<img src="./img/sp_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.4QzHc-0.g"><br>
<img src="./img/sp_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.4QzHc-0.g"><br>
<img src="./img/sp_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.4QzHc-0.g"><br>
<img src="./img/line_xpimg_gif.gif?_xpxi=qATwnTvjizHjcI77cO9w0w.0.bfJ6V-0.g"><br>
※対象となるのは <img> タグと<body background> で指定されたファイルのみとなります。
※画像ファイルは”ファイルパス”、”ファイルに付加されているパラメータ”、”<img>タグの独自拡張属性” がすべて同じ場合に同一ファイルと見なされます。
以下はすべて異なる画像ファイルと認識されます。
  <img src="line.gif">
  <img src="image/line.gif">
  <img src="line.gif?data=123">
  <img src="line.gif" adaptive>

元コンテンツを取得する際のAcceptヘッダの値を "*.*" から、一般的な "*/*" へ変更

x-Servlet では画像の先読み時に元のリクエストに Acceptヘッダが無い場合は "Accept: *.*" というヘッダを追加してコンテンツサーバにリクエストしていましたが、 "*/*" に変更しました。

元のリクエスト(htmlファイルを要求した際のリクエスト)にAcceptヘッダが存在する場合は画像先読み時にもそのまま送信します。

xproxy.propertiesの設定項目"inputValueSanitizing"のデフォルト値を"false"から"true"へ変更

Version2.8.0 までの初期設定値は "false" でしたが、Version2.8.1 からはクロスサイトスクリプティング対策として出荷時の初期設定値を "true" としました。

元コンテンツがUTF-8の場合に、一部の文字が"?"と表示される不具合を修正

UTF-8 で記述されたコンテンツで以下の文字を使用している場合に携帯端末でも表示できる文字に置き換えます。


置き換え前 置き換え後
キャラクタ Unicode キャラクタ Unicode

― (EM DASH)

U+2014

― (HORIZONTAL BAR)

U+2015

∥ (DOUBLE VERTICAL LINE)

U+2016

∥ (PARALLEL TO)

U+2225

- (MINUS SIGN)

U+2212

- (FULLWIDTH HYPHEN-MINUS)

U+FF0D

~ (WAVE DASH)

U+301C

~ (FULLWIDTH TILDE)

U+FF5E

… (MIDLINE HORIZONTAL ELLIPSIS)

U+22EF

… (HORIZONTAL ELLIPSIS)

U+2026

XHTMLコンテンツにおける<a>タグの"id"属性変換不具合を修正

XHTML において <a>タグの id属性が出力されなかった不具合を修正、および CHTML 端末向けに変換される際に name属性へ変換されなかった不具合を修正しました。
この修正により無効となっていたページ内リンクが有効となります。

JDK1.6系を使用した環境で画像変換機能を使用するとメモリリークが発生する不具合を修正

JDK1.6系の環境で x-Servlet の画像変換機能を使用するとヒープ領域を占有しつづけメモリ不足に陥る不具合を修正しました。
この修正により、インストールディレクトリに配置される画像変換モジュールが
 xproxy_image_222.jar
から
 xproxy_image_223.jar
に変更されます。

メモリリークが発生しているかどうかについてはJAVA の起動オプションで GCログを取得し、ガベージコレクションによってメモリの開放が行われ、一定のレベルまでメモリ消費が下がっていることを確認してください。
メモリリークがあると、GCで開放されるメモリ量が次第に少なくなり、最後には開放できるメモリがなくなります。

メモリリークは JAI が使用するテンポラリファイルへのパスサイズになりますので

システムテンポラリへのパス+JAIテンポラリファイル名(30byteほど)

が「画像1ファイルへのアクセス時」に消費されるサイズとなります。
たとえばテンポラリディレクトリが「/tmp」ならば

「/tmp/jai-FCSS-0123456789012345.tmp」

のような文字列が画像ファイルへのリクエストのたびにメモリ上に確保されます。

Keep-Alive を使用した場合、特定のタイミングでリクエストが受け付けられなくなる不具合を修正

Keep-Alive機能を使用した場合、ポートがクローズされずに残ってしまう問題がまれに発生していました。
x-Servlet 内でポートをクローズし続けようとし、内部でループ状態に陥って新規リクエスト受付処理が行えなくなる場合があったのを修正しました。

発生する条件は x-Servlet がブラウザに対してデータを送信している状態でブラウザ側からクローズ要求を出した状態(ハーフクローズ状態)で x-Servlet 側からの FIN パケット送信後に ACK パケットが返ってこない状態となります。
この状態になると x-Servlet が切断処理内で待機状態となってしまい(ACK待ち)、受付処理が行えなくなるので新規リクエストが受け付けられず接続待ちのままタイムアウトしてしまいます。

XHTML変換時に、特定のタイミングにおいてCSS変換エラーが発生する不具合を修正

XHTML変換機能を使用した場合、マルチスレッド処理内でまれに競合が発生し、CSS変換エラーが発生していた不具合を修正しました。

この問題が発生した場合は logs/error.log に以下のようなエラーが記録されます。

WARN [YYYY/MM/DD HH:MM:SS] - ConvertProcessor:Exception occur.
java.lang.NullPointerException
  at jp.co.flexfirm.xproxy.converter.css.CssConverter.convertCssProperty(CssConverter.java:209)
  at jp.co.flexfirm.xproxy.converter.css.CssConverter.convert(CssConverter.java:164)
  at jp.co.flexfirm.xproxy.struct.Element.convertCssProperties(Element.java:708)
  (以下略)

xproxy.properties の sessionRefreshInterval と cacheRefreshInterval の設定が反映されなかった不具合を修正

従来はx-Servletのキャッシュクリアをチェックする間隔を指定する "sessionRefreshInterval" と "cacheRefreshInterval" が反映されず、内部で30秒固定となっていた不具合を修正しました。

※Version2.8.1 から "cacheRefreshInterval" が設定通りの60秒が初期値となります。Version2.8.1 以前と同じ動作にする場合は"cacheRefreshInterval" の設定値を30秒(30000)に設定してください。
"sessionRefreshInterval" は初期値が30秒なので変更の必要はありません。

TOP