Locust压测React应用隐私页报404但浏览器访问正常如何解决
问题根因
浏览器可正常访问但Locust请求返回404,由三个常见问题导致:
- 路径匹配错误:报错信息显示实际被请求的URL为
https://xxx/privacy-policy/(末尾带斜杠),但测试代码中写的是无末尾斜杠的/privacy-policy。大部分静态站点托管规则会对无末尾斜杠的路由做301跳转,若跳转环节存在头校验、重定向策略限制,很容易返回404。 - 请求特征被拦截:Locust默认发送的请求不带浏览器常规的
User-Agent、Accept等头,很容易被站点的CDN/WAF爬虫规则识别拦截,直接返回404状态码。 - 原测试代码存在缩进错误:类属性、任务方法的缩进不符合Python语法要求,可能引发非预期的请求逻辑。
修复步骤
- 修正请求路径,直接使用带末尾斜杠的路由
/privacy-policy/,匹配站点实际生效的路由规则。 - 给Locust客户端配置和真实浏览器一致的默认请求头,绕过爬虫拦截规则。
- 不建议将
wait_time设为0,瞬时高并发请求很容易触发站点限流策略,返回异常状态码。 - 若站点为React单页应用且服务端未完全配置前端路由fallback,可通过
catch_response参数手动标记符合预期的404为成功(真实用户访问时前端路由会自动渲染页面,不会感知到404)。
修复后完整代码
import time from locust import HttpUser, task, constant class CreateLead(HttpUser): host = "https://xxx" wait_time = constant(1) # 模拟Chrome浏览器的默认请求头,可从浏览器F12网络面板中复制你自己访问时的完整头替换 default_headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", "Connection": "keep-alive" } @task def loadtest(self): self.client.get("/") time.sleep(1) self.client.get("/privacy-policy/") time.sleep(1)
如果调整后依然返回404,直接打开浏览器F12的网络面板,找到访问隐私政策页的那条请求,把它的请求路径、所有请求头完全复制到Locust配置中即可——浏览器能正常访问的前提下,只要Locust发送的请求和浏览器完全一致,就不会返回异常状态码。
内容的提问来源于stack exchange,提问作者Ajay Singh
相关产品推荐
相关产品推荐

