プロキシサーバのキャッシュも禁止するには?

[上に] [前に] [次に]
りょう [E-Mail] 1999/12/10(金) 21:03:21
初めまして! こんなに知識がつまったHPがあるのかと感動しています。

現在、料金表示サービスのようなシステムのWebサーバ部分をサーブレット、JSP等を利用して構築しているのですが、仕様で「表示したデータは、ブラウザ、プロキシサーバ共に残してはいけない」となっており、方法を調査中です。

../199812/98120086.htm
に「HTML META no-cache: はブラウザにのみ有効、HTTP Pragma no-cache: ならブラウザ、プロキシ両者に有効」との記述を目にしましたが、HTTPヘッダの方を利用すれば良いと考えてよろしいのでしょうか?
ご存知の方、どうかご教授ください。

ジェインウェイ大佐 1999/12/10(金) 22:57:31
#!/usr/local/bin/perl5

$html = './index.html'; #HTMLファイル名
print "Content-Type: text/html; Pragma: no-chache\n\n";
print `cat "$html"`;

というCGIスクリプトを介せば可能だと思う。しかし、そもそも
CGIはキャッシュされないのでHTTPヘッダに「Pragma: no-chache」
を入れなくても一緒かなぁ??

ただし、CGIで表示するために元のHTMLにSSIを使っていた場合は
SSIは機能しなくなるので注意してね。それとUNIXコマンドのcatが
使えない場合はopenを使うように改造してみて下さい。

のぐ 1999/12/11(土) 00:11:21
プロキシのキャッシュを抑えるのは厳密には不可能だと思います。
性質の悪いプロキシーはなんでもかんでもキャッシュしたりするので、始末に負えません。先日など、cookie をキャッシュするという凶悪犯に出会いました(某富○通製品)。私の場合、おまじないとして次のものを書いています。効果は分かりませんが。
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-control" CONTENT="no-store">
<META HTTP-EQUIV="Cache-control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="Mon, 1 Jan 1990 01:01:01 GMT">
可能ならHTMLにではなくHTTPヘッダに書いて送出するのがベターかも知れません。
また、キャッシュされないのではなく、キャッシュが役に立たないようにするという方法もあります。それは、URLに特殊な番号を入れてしまうという方法です。ユーザーからのアクセスごとに番号を算出して、

http://・・・・/abcd1000/・・・・/・・・・
http://・・・・/abcd1001/・・・・/・・・・
http://・・・・/abcd1002/・・・・/・・・・

という風にしてしまえば、キャッシュされても二度と同じURLにはならないので、役に立ちません。番号の部分は単純増加ではなく、ハッシュするなどして推測できないようにすれば、なお効果的です。

larc 1999/12/13(月) 13:26:45
ServletでしたらHttpServletRequest requestに対して、
request.setHeader("Pragma", "no-cache");
としてみては?

りょう 1999/12/14(火) 10:45:55
みなさん、早速アドバイスありがとうございます!

まだ始めたばかりなので、「HTTPヘッダに出す」というのはCGIと同じ感じで、サーブレットの
   out.println("....");
で書いていってしまって良いのかしら?と悩んでいたところでした^^;。ちゃんとHttpServletResponseインタフェースにヘッダ設定メソッドがあったんですね。是非ためさせていただきます。

ところで、のぐさんがMetaタグをたくさん記述しているのは、やはりプロキシキャッシュのコントロールが「プロキシ依存」だからなのですか?プロキシによっては、"Pragma"で指定できたり、"Cache-control"の指定を読みこんでいる、ということなのでしょうか? それでしたら、最善策として私も記述しようかと思っているのですが...。

のぐ 1999/12/14(火) 12:29:08
> プロキシによっては、"Pragma"で指定できたり、"Cache-control"の指定を読みこんでいる、ということなのでしょうか?

はっきりしたことは言えないのですが、プロキシの仕様によってどうとでも解釈されてしまうらしい(←この辺がヨワイ!)ので、なんでもかんでも書いてます。おそらく、無視はされても悪さはしないので、書いてみて損はないかと思いますが。課金関係でお使いになるなら、実際に何種類かメジャーなプロキシで試してみるのがよいかと思います。

りょう 1999/12/15(水) 18:43:04
[[解決]]
そうですね。念のため記述した上で、可能な限りテストをしてみようかと思っています。いろいろとありがとうございました。m(.__.)m

[上に] [前に] [次に]