使用Jmeter缺少Varnish缓存命中请求,但如果使用Postman发送它命中缓存

时间:2016-03-04 11:54:10

标签: jmeter

我正面临着使用Jmeter发送一个GET请求的问题。每次错过服务器上的Varnish缓存时都会显示响应标头,并从Application Sever返回响应。请在下面找到标题 X-Cache:MISS X-Cache-Hits:0

如果我使用Postman发送完全相同的请求,第一次它会错过Varnish缓存但是如果我再次发送相同的请求,它会点击Varnish缓存并且缓存命中数增加。 X-Cache→HIT X-Cache-Hits→1

我尝试过Jmeter版本2.6,2.9,2.11和2.13,但观察到相同的行为。即使从Fiddler发送请求,我也可以看到来自Varnish Cache本身的报头响应。

只是简单的获取请求。我比较了JMeter和Postman请求,两个请求完全相同。请让我知道如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

根据你上面写的时间,我可以猜到:

  1. 所有第一个请求都以相同的方式处理,与它们的发送方式无关。

  2. 作为对第一个请求的响应的一部分,服务器返回一个设置新标头的命令,其处理方式与处理cookie(SET-COOKIE逻辑)相同。因此,服务器期望您的下一个请求将包含此必需的X-Cache标头。

  3. 但Jmeter不是浏览器,并且不会将下一个请求与先前接收的数据相关联(默认情况下至少)。因此,如果您使用浏览器(及其扩展名)重播此方案,则一切正常。并且您的Jmeter每次都发送相同的请求。

    如果您比较浏览器发送的第一个和第二个请求,您会发现第二个请求包含所需的听众。

    所以,如果我是对的,要解决问题:

    1. 确定服务器如何告诉客户端将新标头添加到下一个请求(Javascript?)
    2. 在Jmeter方案中实现此逻辑。
    3. 或者只是将X-Cache标头添加到您的请求中。

答案 1 :(得分:1)

我的期望是Postman(无论是什么)尊重ETag标题而JMeter没有。

我认为添加HTTP Cache Manager可以解决您的问题。

答案 2 :(得分:0)

每次请求进入顶级服务器时,我都在标头中添加了唯一键,它开始从Varnish缓存返回响应。唯一的是随机数。

我还检查过Postman还在每个请求中发送一个唯一参数。虽然我仍然不确定为什么独特在这里有所作为。