我正面临着使用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请求,两个请求完全相同。请让我知道如何解决这个问题。
答案 0 :(得分:1)
根据你上面写的时间,我可以猜到:
所有第一个请求都以相同的方式处理,与它们的发送方式无关。
作为对第一个请求的响应的一部分,服务器返回一个设置新标头的命令,其处理方式与处理cookie(SET-COOKIE逻辑)相同。因此,服务器期望您的下一个请求将包含此必需的X-Cache标头。
但Jmeter不是浏览器,并且不会将下一个请求与先前接收的数据相关联(默认情况下至少)。因此,如果您使用浏览器(及其扩展名)重播此方案,则一切正常。并且您的Jmeter每次都发送相同的请求。
如果您比较浏览器发送的第一个和第二个请求,您会发现第二个请求包含所需的听众。
所以,如果我是对的,要解决问题:
或者只是将X-Cache标头添加到您的请求中。
答案 1 :(得分:1)
我的期望是Postman(无论是什么)尊重ETag标题而JMeter没有。
我认为添加HTTP Cache Manager可以解决您的问题。
答案 2 :(得分:0)
每次请求进入顶级服务器时,我都在标头中添加了唯一键,它开始从Varnish缓存返回响应。唯一的是随机数。
我还检查过Postman还在每个请求中发送一个唯一参数。虽然我仍然不确定为什么独特在这里有所作为。