エンジニアが発信する【2006年02月】の記事です

エンジニアが作る最新ITブログ トップ>【2006年02月】

2006年02月13日

cookieのexpireがブラウザにより異なる

かすかな記憶が事実だったので、まとめておきます。サーバー上でcookieをexpire付きで設定した場合、ブラウザによってその日付の計算方法が異なります。

ieの場合:
HTTPレスポンス内のexpireを忠実に使用します。従って、「Expires=Mon, 13-Feb-2006 02:52:04 GMT」とあれば、2006/2/13の11:52:04までcookieは有効です。

firefoxの場合:
HTTPレスポンス内のexpireとdateの差を、クライアントのシステム時間に加えてcookieの有効時間を計算しています(結果から予想)。

両者の違い:
例えば、1時間有効のcookieを返した場合、サーバー時間を7日前の2/6にします。すると、(当たり前に)HTTPレスポンスは2/6の1時間後の時間を返します。
ieでは、HTTPレスポンスの時間を忠実に使用するので、クライアント側は2/13のため常にcookieは期限切れになります。
一方、firefoxでは、expireとdateの差(つまり1時間)を求めて、クライアントのシステム時間を基準に計算します。従って、2/13の1時間後の時間となります。

また反対にサーバー時間を7日間進めた場合、HTTPレスポンスは2/20の1時間後を返します。
ieではそのまま使用するため、本来の設定(1時間)より時間のずれ(1週間)の分だけ長くcookieが生きます。
firefoxでは、クライアント時間を基準に計算するため、この場合でも有効時間は1時間です。

検証アプリ⇒cookie.war

むかしのnn4.7もfirefoxと同じだったはず。operaはieと同じだった。

#エンドユーザに優しいのはfirefoxなのか・・・

2006年02月09日

ajp13プロトコル仕様

さて、パケットをキャプチャしたのですが、HTTPならば見て分かるのだが、mod_jkとtomcat間のプロトコルではバイナリのヘッダが付いている。何なのかなぁと思って検索するとすぐに見つかる。

AJPv13

どうりでHTTPのGETとかPOSTとかの文字列がパケット内に出てこないわけだ。

それにしてもjk1とjk2は紛らわしい。何とかしてほしい。tomcat/confのserver.xmlのConnectorを変えなくてトラブった。


2006年02月07日

昨年末に再現待ちで諦めた障害が明らかにされる!

昨年末のクリスマス直前に結構苦労した問題がありました。

ASP.NETアプリからSOAPを使ってJavaのApacheAxisに通信していたのですが、ある1件だけサーバー上でSAXParserExceptionとなる。とにかく再現ができない。ログを見ると、半年前に数回再現しているようだ。

結局クリスマス3連休に現地調査する予定だったのが、エンドユーザがうっかり再現データを消してしまって、何も調べられなくなった。

あれから1ヶ月以上経って、ようやく原因が分かった。xerces 2.6.2以前のバッファリングの境界値の扱いらしい。⇒『SAXParseException when delimiter at end of buffer』

というわけで、xerces 2.7.0以降にすれば直る(はず)。

CVSでDiffを見たら、2箇所"<="を"<"にしただけみたいだった。しょうもないミスだけど、この手のバグは再現できなくてきつかったです。


2006年02月07日

Jsp.war

名称は(仮)なんですが、とりあえずJsp.warと言っておきましょう。
Jspジェネレータです。見方を変えると、javaインタープリターです(詐欺だ!!)。
Jsp.war

動的に生成されたjspページを開ける環境が必要です。いわゆる開発モードといわれる状態でアプリサーバーが動いていないといけません。tomcatなら設定をいじらず、そのままの状態。

java.util以外をimportしたいみたいなときは、直接generate.jspをいじってください。そのうちにパラメータで渡せるようにするつもりですが。

・・・

(2/7)
やはりimportは指定できないとつらいので、パラメータを追加した。サンプルを少々追加。
Jsp.war




2006年02月07日

http://javafaq.jp/

javaでは常識なのかもしれないですが、内部クラスを探していて、ここのサイトの説明に行き着きました。

http://javafaq.jp/



2006年02月06日

メモリチェックプログラム(java)

かなり迷惑なプログラム。javaで10MBづつメモリを確保していくが、無限ループになっている。

java -Xmx256M MemoryCheck

上記のように起動すると、本当に256MB近く確保できるかどうかが分かる。Windows上のSunのVM(1.4.2)では240MBまで確保できた。OSやVMが変わるとちょっと動きが異なる。

ソースはこちら



エンジニアが作る最新ITブログ トップ>【2006年02月】

メンバー紹介

タグパネル

ランキング

エンジニアが作る最新ITブログ DODA