首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Varnish / VCL大师:如何使用Varnish fetch传递请求体?

Varnish / VCL大师:如何使用Varnish fetch传递请求体?
EN

Stack Overflow用户
提问于 2011-09-12 05:01:29
回答 2查看 2.9K关注 0票数 0

恐怕我对varnish还是个新手,但是我有一个问题,我在任何地方都找不到解决方案: Varnish被设置为缓存GET请求。我们有一些请求,它们有太多的参数,所以我们决定在请求的主体中传递它们。当我们绕过Varnish时,这可以很好地工作,但是当我们使用Varnish (用于缓存)时,请求在没有正文的情况下被传递,因此Varnish背后的服务失败。

我知道我们可以使用POST,但我们想要获取数据。我还知道,如果我们使用pass模式,Varnish可以传递请求体,但据我所知,在pass模式下发出的请求不会被缓存。我已经在url中加入了一个哈希值,这样当一切正常时,我们实际上会从缓存中获得正确的数据(就url而言,否则调用看起来都是一样的)。

现在的问题是,“仅仅”如何重写vcl_fetch来将请求正文传递给now服务器?欢迎任何提示和技巧!

提前感谢

琼恩

EN

回答 2

Stack Overflow用户

发布于 2011-12-02 02:15:04

我不认为你可以,但是,即使你可以,这也是非常危险的: Varnish不会将请求主体存储到缓存或哈希表中,因此它无法看到具有相同URI和不同主体的两个请求之间的任何差异。

我还没有听说过用于读取请求体的VCL键,但是,如果它存在,你可以将它传递给req.hash来区分请求。

无论如何,请求正文应该只与POST或PUT...and POST/PUT请求一起使用,而不应该缓存。

请求body应该将数据发送到服务器。缓存用于获取数据...

我不知道细节,但我认为在你的过程中有一个设计问题...

票数 0
EN

Stack Overflow用户

发布于 2011-12-29 21:12:54

我不确定我是否正确地回答了您的问题,但是如果您尝试以某种方式与请求主体交互,这在VCL中是不可能的。您没有任何VCL变量/子例程来执行此操作。

您可以在VCL中找到可用的变量列表(或在man vcl中):

我同意Gauthier的观点,您的系统似乎存在设计问题。

“希望这能有所帮助。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7381220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档