http跳转https应该使用哪个状态码?

  1. 域名跳转 应该使用哪个状态码?
  2. 顶级域名 跳转到 主域名www 使用哪个状态码?

俩问题,谢谢。

首先看了看抖音、阿里、百度、qq他们的跳转,有使用302的比较多,其次是301和307。

原始 http目标 httpshttp状态码
http://www.douyin.comhttps://www.douyin.com307
http://www.baidu.comhttps://www.baidu.com307
http://www.douyin.comhttps://www.douyin.com307
http://www.aliyun.comhttps://www.aliyun.com307
http://www.alipay.comhttps://www.alipay.com301
http://www.tencent.comhttps://www.tencent.com301
http://www.qq.comhttps://www.qq.com302
http://www.bytedance.comhttps://www.bytedance.com301

那些307的都参加了HSTS。

Non-Authoritative-Reason: HSTS

然后从顶级域名跳转到主域名www,他们大部分都是使用了302的状态码,就不列举了,也有使用301的。

我就想问问各位懂的能给解释下,到底该用哪个状态码?

阅读 5.6k
3 个回答

301 Moved Permanently 永久重定向
302 Moved Temporarily 临时重定向(POST改为GET)
307 Temporary Redirect 临时重定向(保持POST)

301一般用作永久跳转,除非用户清浏览器缓存,否则不会修改跳转地址;
302和307可以在后端修改跳转地址,不同在于302会把POST转为GET请求,307可以保持POST

还是看自己场景吧,按照 @IT小马 的整理,我根据个人的理解来补充一些内容。

如果你是自己的个人站,可以使用 302 即临时重定向,如果你 HTTPS 特别稳定(如: 使用免费证书可能存在一些续期不及时等问题),那可以选择 301 并启用 HSTS(后面的内容都需要 HSTS)。

如果你是商业项目,还是比较建议你使用 301 + HSTS 的组合,因为商业项目一般都是比较稳定的, 也不差 HTTPS 证书这点儿钱了,所以你可以假设你永远都会使用 HTTPS ,所以可以选择永久重定向,且重定向前后的链接一定是有效的、且相对应的,否则因为其“永久”的特性,可能会存在更新困难的问题。

如果你的项目有历史包袱,比如你在 v1.0 的版本中发布的接口地址是 http 的,然后现在你认识到了 http 是不安全的,应该采用 https,现在你可以同时维护 HTTP 和 HTTPS 访问为此发布了 2.0 版本,但是对于接入方如果一开始就使用了 HTTP ,而现在、今后如果他不修改或者因为其他原因不便修改,他始终都会访问到 HTTP,就只有新的接入方看到了 2.0 的文档,这时候最初的接入方还是访问了 HTTP ,还是不安全。

现在你就可以选择使用 307 把这些请求(或 308(永久))来把这些请求在保持原请求方式下,转移到 HTTPS 来。

当然,上面这些都是理想情况,实际上使用 HTTP 重定向到 HTTPS ,在严格意义上来讲,它本身就是不安全的。

因为如果存在中间人攻击的话,别人可以在你一开始向 HTTP 发送请求的时候就进行截获/处理,而这时候重定向后的地址就已经成了中间人处理过的内容了。

当然从用户体验来说,307 的体验可能会更佳。

一定要配上 HSTS。

301对SEO比较友好。
一直使用301把http转为https
domain.com 跳转到 www.domain.com

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题