短链接将用户转发到原始网址时使用的 HTTP 重定向,主要有 301 (永久重定向) 和 302 (临时重定向) 两种。采用哪种会直接影响 SEO、访问分析精度和性能,因此准确理解其区别非常重要。
301 重定向的 HTTP 响应头构成如下:"HTTP/1.1 301 Moved Permanently""Location: https://example.com/original-page""Cache-Control: max-age=86400""Content-Length: 0"。浏览器读取 Location 头后自动跳转到指定网址。301 是向浏览器和搜索引擎传达资源已永久移动的状态码。浏览器会缓存此信息,下次起不再经过短链接服务器,直接访问原始网址。搜索引擎检测到 301 重定向后,会将链接权重 (SEO 评价) 传递给重定向目标。
302 重定向的响应头如下:"HTTP/1.1 302 Found""Location: https://example.com/original-page""Cache-Control: no-cache""Content-Length: 0"。302 表示资源临时位于其他位置。浏览器不会缓存重定向目标,每次都经过短链接服务器。这一特性使得点击数和访问来源的精确追踪成为可能。大多数短链接服务采用 302 的原因就是优先保证访问分析的精度。
使用 curl 命令可以从终端直接确认重定向行为。执行"curl -I https://short.example/abc123"可以仅显示响应头,确认状态码 (301 或 302) 和 Location 头。执行"curl -v -L https://short.example/abc123"可以追踪整个重定向链,详细显示到最终链接目标的每个步骤。"-L"选项自动追踪重定向,"-v"选项输出请求和响应的详细信息。
两者对性能的影响也不同。301 重定向由于浏览器缓存生效,第 2 次及之后的访问速度更快。而 302 重定向每次都需要向服务器发送请求,会增加少许延迟。不过在现代服务器基础设施下,这一延迟仅为数十毫秒,对用户体验的影响很小。
除 301 和 302 外,HTTP 规范中还有 307 (Temporary Redirect) 和 308 (Permanent Redirect) 两种重定向状态码。307 与 302 同样是临时重定向,但有一个重要区别。302 中浏览器在重定向时可能将 HTTP 方法从 POST 改为 GET,而 307 必须保持原始请求方法。同样,308 是 301 的严格版本,禁止重定向时更改方法。短链接服务通常只处理 GET 请求,因此 307/308 与 301/302 的实质差异较小,但在 API 重定向中保持 POST 方法很重要时,307/308 更为合适。欢迎参阅在 Amazon 搜索 Web 服务器设置参考书。
从 SEO 角度考虑,如果将短链接作为永久链接使用,301 更为合适。博客文章或固定页面的链接等重定向目标不会改变的场景适用。而活动页面或限时内容等重定向目标可能变更的场景,302 更为合适。
缺点和权衡也需要了解。301 重定向最大的缺点是,由于浏览器缓存,第 2 次及之后的访问不再经过服务器,无法精确计量点击数。除非清除缓存,用户的浏览器会持续直接访问原始网址。此外,想要更改重定向目标时,如果浏览器缓存仍在,会继续转发到旧网址。302 重定向的缺点是每次都需要经过服务器产生少许延迟,以及搜索引擎可能不会完全传递链接权重。
在实务中,确认短链接服务使用的是哪种重定向,并选择符合自身目的的服务非常重要。部分服务还提供了让用户选择重定向类型的选项。
相关书籍:如果您想系统学习 HTTP 原理和 Web 技术,推荐在 Amazon 搜索相关书籍。