如何强制触发TOO_MANY_REDIRECTS错误?脚本测试可用的实现方法
复现TOO_MANY_REDIRECTS错误的几种常用方法
以下方案都可以稳定触发重定向循环错误,按需选择即可:
1. 服务端配置实现(最贴近真实生产场景)
Nginx 配置
直接在站点配置的server块中添加两条互指的重定向规则:
location /test-redirect-loop { return 302 /test-redirect-loop-2; } location /test-redirect-loop-2 { return 302 /test-redirect-loop; }
重载Nginx后访问对应路径即可触发,301/302重定向都可以生效,只要形成跳转循环即可。
Apache .htaccess 配置
在站点根目录的.htaccess文件中添加如下规则:
RewriteEngine On RewriteRule ^test-loop$ /test-loop-2 [R=302,L] RewriteRule ^test-loop-2$ /test-loop [R=302,L]
Node.js Express 实现
直接写两个互跳的路由即可:
app.get('/test-redirect-loop', (req, res) => { res.redirect('/test-redirect-loop-2'); }); app.get('/test-redirect-loop-2', (req, res) => { res.redirect('/test-redirect-loop'); });
2. 纯前端静态页面实现(无需修改服务端配置)
写一个最简单的HTML页面,设置自跳转规则即可:
<!DOCTYPE html> <html> <head> <!-- 方案1:meta标签自动重定向,二选一即可 --> <meta http-equiv="refresh" content="0; url=./index.html"> </head> <body> <script> // 方案2:JS强制跳转,二选一即可 // window.location.href = './index.html'; </script> </body> </html>
部分浏览器会限制本地静态页面的自跳转,建议放在本地静态服务(比如nginx静态服务、serve工具)上测试,效果更准确。
3. 本地临时模拟(无需部署页面)
如果只需要测试脚本对该错误的处理逻辑,不需要真实部署页面,可以直接在抓包工具、接口Mock工具中构造返回:
- 设置响应状态码为
302 Found - 响应头新增
Location字段,值指向当前请求地址,或者另一个会跳转回当前地址的路径 - 连续请求达到浏览器限制次数后就会触发TOO_MANY_REDIRECTS报错
注意:不同浏览器对最大重定向次数的限制不同,Chrome、Firefox默认阈值为20次左右,达到阈值就会自动终止跳转并抛出错误。
内容的提问来源于stack exchange,提问作者Thadeu Munhóz Cesário
相关产品推荐
相关产品推荐

