[Reference:<_A86@delegate-ja.ML_>]
Newsgroups: mail-lists.delegate-ja
[DeleGate-Ja] Re[2]: [DeleGate-Ja:85] クライアントキャッシ ュが無い場合のDeleGat eキャッシュの扱
佐藤 様
早々のご回答有難うございました。
日立システムの松本です。
調査不足ですみません。
これから調べてみます。
>DeleGateにキャッシュされていれば、キャッシュ中のLast-Modifiedに基づいて、
>あるいはキャッシュファイルの日付から、DeleGateがIf-Modified-Sinceを生成
>して要求し、変更無しであればサーバから304応答を得て、クライアントに200応答
>を返すでしょう。
>そのような場合("-vd"オプションつきでの)ログには、"HTTP <=+= 304 [cache-path]"
>というようなメッセージが残されます。
>以下のログで、"REQUEST= (no-cache)" とあるのは、このリクエストがクライアント
>によってリロードされたことを示しています。その場合にはDeleGateは、手元の
>キャッシュの有無や日付に関係なく、サーバからの最新のデータを取得しようと
>します。そのため、サーバへのリクエストに If-Modified-Sinceは付加しません
>(conditional request にしません)。
>この場合、クライアントが送ってきているリクエストのヘッダに、"Pragma: no-cache"
>や "Cache-Control: no-cache" があるなら、DeleGateのこの動作はそうあるべき
>ものだと思います。ただ、もし "Cache-Control: max-age=0" によるリロードである
>場合には、If-Modified-Since を使用して新鮮さを検査するようにするほうが、
>良いかも知れません。(RFC2616 14.9.4)
>
⇒DeleGateはクライアントからのPragma: no-cacheや、Cache-Control: no-cache
には、対応していないと以前、知人から聞いたことがありました。これは当方の
勘違いですね。
クライアントからのリクエストに Pragma: no-cache や Cache-Control: no-cache
が入っていると、DeleGateは自身のキャッシュを無視してサーバに対して
If-Modified-Since無しのリクエストを出すという事ですね
(結果はDeleGate内にはキャッシュされる)
また、クライアントからのリクエストにPragma: no-cache、Cache-Control: no-cache、
If-Modified-Sinceがすべてが有る場合、DeleGateは If-Modified-Sinceを優先に
し、クライアントからのRELOADとは見なさないということでしょうか?
>この後のログが重要ですが、キャッシュに書き込まれた場合には、
>"XXX bytes written to [path]" というようなログがあるでしょう。あるいは、
>受信データのサイズ不一致か何かの理由でキャッシュしなかった場合には、
>その理由コードが示されているはずです。
>例えば、サーバが応答に、"Last-Modified"を指示していないとか、Set-Cookie
>を含んでいるとか、サイズが不一致だとか、リクエストにCookieを含んでいる
>とか、などなどです。
>
>またこのログでは、クライアントからのリクエストのホスト名がFQDNでなされてい
>ないこと、サーバからのレスポンスのContent-Typeが、バイナリデータであるのに
>text/plain になっていることが示されています。これらがキャッシュの読み書き
>に何か影響している可能性はあります。
>
>DeleGateに "-vd" オプションをつけて実行すれば、キャッシュの読み書き等に
>関する、より詳しい情報が得られますので、ヒントになると思います。
>また、FFROMCL=-tee-n-h FTOSV=-tee-n-h FFROMSV=-tee-n-h などのオプションを
>つければ、クライアントやサーバとやりとりされるリクエストやレスポンスの
>ヘッダを覗くことができます。
⇒色々と有難うございます。
実機確認してみます。
|