0

私は、その前にVarnishがあるサードパーティのWebサービスを使用しています。ワニスは読み取り専用であり、キャッシュされていない要求はかなり遅いため、そこにあります。

jQueryとJSONPを使用してwebserivceにクエリを実行しています。通常、$.getJSONJSONPを使用した追加のGETパラメーターを介したキャッシュバスティングを採用しています(のドキュメントによる$.ajax)。私のWebサービスは読み取り専用なので、結果をキャッシュしたいので、次のように呼び出します。

$.ajax({
  url: "http://example.com/json/callback=?",
  dataType: "jsonp",
  cache: true,
  data: data,
  success: callback
});

Chromeの[ネットワーク]タブでリクエストが送信されるのを見ることができます。

http://example.com/json?callback=jQuery171047077397373504937_1348163237407&arg1=foo&arg2=bar

以来、リクエストでcache=true余分な「」を取得していません。&_=[TIMESTAMP]

callback=応答が返ってくるのが非常に遅いので、リクエストの一部のために、私は効果的にワニスをバイパスしていると思います。

言い換えると、jQueryは呼び出しごとに一意のコールバックキーを使用するため、Varnishが各リクエストを異なるものと見なしていると想定するのは正確ですか?したがって、キャッシュされた結果が返されることはありませんか?

サードパーティにVarnishを変更するように依頼する前に、正しい問題を特定したことを確認したいと思います。VarnishVCLのGETパラメータを無視します

4

1 に答える 1

3

コールバック文字列のみが get 変数ではなく、リクエスト URL の一部です。ワニス構成を簡単にするために、? を追加できます。その URL に http://example.com/json/?callback=jQuery171047077397373504937_1348163237407&arg1=foo&arg2=barにします

または、ワニス構成の req.url で regsub() を次のように使用できます。

set req.url = regsub(req.url, "callback=jQuery\d+_\d+&", "");
于 2012-09-21T07:28:06.203 に答える