curl -sI -b cookie.txt https://example.com/file/9 | head -1 # 带登录态无权限时应为 403
会员才有的下载地址,对普通用户直接返回了 404,用户以为链接失效一直来问,客服也判断不出这是权限问题。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:为了避免暴露资源到底存不存在,把没有权限也写成了 404,前端和用户都拿不到正确的语义提示,问题被藏起来,排查成本反而更高。
「403 与 404 混用」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
处理上按这个顺序:已经登录但没有权限的情况返回 403,明确告诉前端;没有登录的返回 401,顺手把用户引导到登录页再回来;资源真的不存在时才返回 404,三种情况要分开处理。
确认没问题再收工,三种身份分别拿到 200、403 和 404 三种响应,前端提示都能对应上不再混淆。
