响应码协商是在重定向处理中,根据请求来源的类型和条件动态切换返回的 HTTP 状态码的设计方法。例如,对同一个短链接,向搜索引擎的机器人返回 301(永久重定向),向一般浏览器返回 302(临时重定向)或 307,就是这样区分使用的一个例子。
技术背景是,搜索引擎对 301 和 302 的处理不同。Google 的文档说明,永久重定向被用作将重定向目标视为规范网址的信号,而临时重定向不被用作该信号。在短链接服务中,既有链接创建者希望短链接本身留在搜索结果中的情况,也有希望重定向目标被当作规范网址的情况。
在实现协商时,User-Agent 头部的解析是基础。识别 Googlebot、Bingbot 等已知爬虫,并分别返回相应的状态码。但由于 User-Agent 容易伪造,最好同时使用 IP 地址的反向解析验证。
需要注意的是,Google 有时会将伪装(向机器人和用户返回不同内容的行为)视为违反指南。切换响应码的前提是重定向目标相同,必须与按对象提供不同内容的设计明确区分。