邮件客户端里点退订,浏览器打开一个白页写着 405 Method Not Allowed,用户以为没退成功,第二天又收到一封,直接点了举报。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

curl -i -X POST https://example.com/unsubscribe?token=abc123
curl -i "https://example.com/unsubscribe?token=abc123"

List-Unsubscribe-Post 声明了一键退订,服务端路由却只注册了 POST,链接被复制到浏览器时变成 GET,两条路径都没走通。两种方法都得接住。这一点先确认清楚,后面就不用反复试。

「一键退订 405」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,给同一个路径同时注册 GET 和 POST,GET 走确认页,POST 直接执行退订;退订成功后返回 200 和一个纯文本页面,别跳转到需要登录的地址;用 curl 两种方法各打一次,确认返回码和数据库状态一致。

改完照着核一遍,GET 和 POST 都能把状态改成 unsubscribed,页面提示退订成功而不是 405。

作者 9823189