勾选品牌、价格、尺寸之后地址栏变成两百多字符,复制链接发给同事打开报 414,浏览器偶尔还会把地址截断。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
$brands = implode(',', $_GET['brand'] ?? []);
$args = ['brand' => $brands, 'price' => '100-300'];
// nginx
large_client_header_buffers 4 16k;
每个筛选项各占一个查询参数,多选项还用同名键重复出现,长度随勾选数量线性增长,网关先撑不住,分享和缓存也容易出错。这一点先确认清楚,后面就不用反复试。
「筛选参数 URL 过长」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
具体做法是,同名多选先合并成逗号分隔的一个参数再拼接;固定参数顺序并过滤空值,避免同样条件生成不同地址;选项极多时改存一组短标识,取回时再还原成条件。
改完照着核一遍,地址长度降到一百字符以内,分享出去打开还是同一批筛选结果。
