某健康码项目中,jmeter压测脚本执行后报错,响应码为400,并且请求方式由post变为了get。打开查看结果树的详情,发现存在test-0、test-1两个请求,test-0请求返回301的响应码。(现象如下图所示)
1、检查域名是否正确:查看响应后的url,发现是正确的
2、请求方式是否定义:脚本中定义了post的请求方式
3、协议不对:猜测是将https协议写成了http导致,更改为https协议后,依然报错
4、重启jmeter后再请求:重启jmeter后请求,仍然没解决。
5、重写脚本:新建一个测试计划,重写脚本后仍然不对。
压测同学在postman编写后可以正常跑通,postman跑通后,感觉更加疑惑。通过复制cURL->jmeter工具->import from cUrl导入jmeter后,也可以正常跑通了。对比两个脚本,发现jmeter脚本中的url写错了,url末尾缺少/。在postman脚本中删掉末尾的/,也报同样的错误。
以上现象引申出一个问题:url末尾加反斜杠/和不加的区别是什么?
概念:url后面有没有反斜杠/的区别在于该url指向的是一个文件,还是一个目录
原理:当web服务器接收到该请求时http://test.com/fxg,会在根目录下搜索名为fxg的文件,如果没有该文件,则会当作目录处理。此时服务器会执行301永久重定向将/fxg定向到/fxg/目录,然后返回fxg目录下的默认首页。
由于是301重定向后,请求方式由post变更为了get,因此查看301的详细解释。
301永久重定向:该状态码表示请求的资源已经被分配了新的URI, 以后应使用资源现在所指的URI, 也就是说如果已经把资源对应的URI保存为书签了, 这时应该按Location首部字段提示的URI重新保存。
注: 当301(302、303)状态码返回时, 几乎所有的浏览器都会把POST改成GET, 并删除请求报文内的主体, 之后请求会自动再次发送。即使301, 302禁止将POST方法改成GET方法, 但实际使用中大家仍然将其改成了GET。
可以将Nginx配置文件中的return 301 永久重定向改为return 307 临时重定向。(307临时重定向与302意义相同,但307会遵照标准,不会从post变为get)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。