2011-09-11 5 views
0

私はニスにはかなり新しいですが、どこにでも解決策が見つからないという問題があります。ワニスはGET要求をキャッシュするように設定されています。我々は、要求の本文にそれらを渡すことを決めた非常に多くのパラメータを持ついくつかの要求を持っています。これは、ワニスをバイパスするときはうまく動作しますが、ワニス(キャッシュ用)を通過するときは、本体がなくてもリクエストが渡されるため、ワニスの背後にあるサービスは失敗します。Varnish/VCL gurus:Varnish fetchを使用してリクエストボディを渡すにはどうすればいいですか?

私はPOSTを使うことができますが、データを取得したいと思っています。また、パスモードを使用すると、ワニスがリクエストボディを渡すことができますが、私が見る限り、パスモードで行われたリクエストはキャッシュされません。私はすでにURLにハッシュを入れているので、実際にはキャッシュから正しいデータを得ることができます(そうでなければ、URLはすべて同じに見えます)。

問題は、リクエスト本体をウェブサーバに渡すためにvcl_fetchを書き直す方法です。ヒントやヒントを歓迎します!

私はあなたができるとは思わない事前に感謝

ジョン

+0

リクエストボディでHTTP GETリクエストが必要ですか?私はこのサイトで質問が見つかるまでそれが可能だとは思わなかった:http://stackoverflow.com/questions/978061/http-get-with-request-body。可能ですが、お勧めしません。私はワニスがこのケースを実装していないと想像することができます.... – ivy

+0

私はそれが推奨されていないことを知っていますが、それは許されています...ワニスはパスモードでサポートしますが、結果をキャッシュしません。フェッチモードではまだサポートしていないようですが、フェッチモードではレスポンスをキャッシュすることができます。 :(( –

答えて

0

、しかし、さえできれば、それは非常に危険だ:ニスはそれので、キャッシュまたはハッシュテーブルにリクエストボディを保存しません。同じURIを持つ2つのリクエストと異なるボディの違いを見ることはできません。

リクエスト本体を読み込むためのVCLキーについて聞いたことがありませんが、存在する場合はreq.hashに渡してリクエストを区別することができます。

とにかく、リクエスト本体はPOSTまたはPUT ...とPOST/PUTリクエストでのみ使用し、キャッシュしないでください。

リクエストボディは、サーバーにデータを送信することになっています。キャッシュが

...データを取得するために使用され、私は詳細を知らないが、私はあなたのプロセスにおける設計上の問題があると思う...

+0

PS:リクエスト(VCL "pass"イベント)を渡すと、すべてが期待通りに機能しますがキャッシュされません) –

0

私は右が、場合あなたの質問を得たことを確認していませんこれはVCLでは不可能な方法でリクエスト本体と対話しようとします。これを行うためのVCL変数/サブルーチンはありません。

あなたがここにVCLで利用可能な変数のリストを見つける(またはman VCLで)することができます

私はゴーティエに同意する、あなたのシステムで設計上の問題を持っているように見えます。

'希望に役立ちます。

+0

そのリンクは死んでいます – jononomo

関連する問題