news 2026/6/10 18:11:47

为啥网站跳转重定向是307 而不是 301 呢?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
为啥网站跳转重定向是307 而不是 301 呢?

文章目录

    • 为啥网站跳转重定向是307 而不是 301 呢?
    • 为什么出现307 状态码呢?
      • 一 HSTS 是什么?
      • 二 HSTS 如何生效?
      • 三、Chrome 浏览器如何支持 HSTS?
      • 四、注意事项
      • 五 总结
      • 六 Chrome 博客 default for navigation https
      • 七 解释返回307的原因
      • 八 在线验证
      • 参考文档

为啥网站跳转重定向是307 而不是 301 呢?

直接使用 http://www.zhiexa.com 访问跳转 发现 返回307 而不是301 ?

我在阿里云的ingress 有一个配置

redirect-ssl-alb-5-ingress.yaml这个会把所有 请求 默认重定向到https并且状态码是301

apiVersion:networking.k8s.io/v1kind:Ingressmetadata:annotations:alb.ingress.kubernetes.io/actions.redirect:|[{ "type": "Redirect", "RedirectConfig": { "host": "${host}", "path": "${path}", "port": "443", "protocol": "https", "query": "${query}", "httpCode": "301" } }]labels:alb.ingress.kubernetes.io/hash:3bd57ba3696867062f8d9c5a22ec0851cabf6b0341cb1ed5ad0b5fdfname:redirect-ssl-alb-5-ingressnamespace:prod# resourceVersion: "294002047"# uid: 9db45a75-1c68-4562-a1e0-b92f432264c7spec:ingressClassName:alb-5rules:-http:paths:-backend:service:name:redirectport:name:use-annotationpath:/pathType:Prefix

saas-alb-5-ingress.yaml简化版

apiVersion:networking.k8s.io/v1kind:Ingressmetadata:annotations:alb.ingress.kubernetes.io/cors-allow-headers:DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,Token,Domainalb.ingress.kubernetes.io/cors-allow-methods:GET,PUT,POST,DELETE,PATCH,OPTIONSalb.ingress.kubernetes.io/cors-allow-origin:http://www.zhi10.com,https://www.zhi10.com,https://gpt.zhihelaw.com,http://gpt.zhihelaw.comalb.ingress.kubernetes.io/enable-cors:"true"generation:6labels:alb.ingress.kubernetes.io/hash:93c8bcd145bac5c5dba55d40817545f8d44cfa3475b7eca1091967e3ingress-controller:alb-5name:saas-alb-5-ingressnamespace:prodresourceVersion:"303452590"uid:5104c841-dcec-4a10-aa62-011d07585decspec:ingressClassName:alb-5rules:-host:www.zhiexa.comhttp:paths:-backend:service:name:saas-legal-research-svc-newport:number:30005path:/zhiexa/official/api/v1pathType:Prefix-backend:service:name:saas-web-svcport:number:30016path:/pathType:Prefixtls:-hosts:-www.zhiexa.com

默认正常返回 会跳转到 https 并且返回301 状态码。

脱离浏览器环境 使用curl 测试 就会发现 返回是301状态码, 并且返回 Response header 中 location 跳到 https

curl-I http://www.zhiexa.com/ HTTP/1.1301Moved Permanently Date: Thu,11Dec202509:38:51 GMT Content-Type: text/html Content-Length:176Connection: keep-alive Location: https://www.zhiexa.com/ Via: HTTP/1.1 SLB.163

为什么出现307 状态码呢?

我们需要了解一下HSTS 这个协议。

HSTS(HTTP Strict Transport Security,HTTP 严格传输安全)是一种 Web 安全策略机制,用于强制浏览器仅通过 HTTPS 与服务器通信,防止中间人攻击(如 SSL 剥离、会话劫持等)。


一 HSTS 是什么?

HSTS 是由服务器通过 HTTP 响应头Strict-Transport-Security向浏览器宣告的一种安全策略。一旦浏览器接收到该响应头,并成功通过 HTTPS 访问网站,就会在指定的时间内(由max-age参数控制)自动将所有对该站点的 HTTP 请求升级为 HTTPS,即使用户手动输入http://或点击 HTTP 链接。

示例响应头:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  • max-age=31536000:表示 HSTS 策略有效期为 1 年(单位:秒)。
  • includeSubDomains(可选):表示该策略适用于所有子域名。
  • preload(可选):表示该站点希望被加入浏览器的HSTS 预加载列表(见下文)。

二 HSTS 如何生效?

  1. 首次访问必须是 HTTPS
    HSTS 只有在用户第一次通过 HTTPS 成功访问网站后才会被浏览器记录。如果用户首次通过 HTTP 访问,则无法获得 HSTS 头,仍可能遭受中间人攻击。
  2. 浏览器缓存策略
    浏览器会将 HSTS 策略缓存在本地(通常按站点存储),在max-age时间内,所有对目标域名(及子域,若包含includeSubDomains)的请求都会被自动转为 HTTPS。
  3. HSTS 预加载(Preload)机制
    为解决“首次访问”问题,主流浏览器(如 Chrome、Firefox、Edge)维护一个内置的 HSTS 预加载列表(Hardcoded List)。网站可以主动提交到 https://hstspreload.org(Chrome 主导),审核通过后会被编译进浏览器代码中。这样即使用户从未访问过该网站,浏览器也会强制使用 HTTPS。

三、Chrome 浏览器如何支持 HSTS?

Chrome 对 HSTS 的支持非常完善,具体包括:

  1. 自动升级 HTTP → HTTPS
    如果某个域名已在 Chrome 的 HSTS 列表中(无论是通过响应头动态添加,还是预加载列表),用户输入http://example.com时,Chrome 会在发起网络请求前就内部重写为https://example.com,不会发出任何 HTTP 请求。
  2. HSTS 缓存管理
    • 用户可通过chrome://net-internals/#hsts页面查询或手动添加/删除 HSTS 条目(主要用于调试)。
    • 清除浏览数据(特别是“Cookie 和其他站点数据”)会清除动态添加的 HSTS 策略,但不会清除预加载列表中的条目
  3. 预加载列表集成
    Chrome 的源码中包含一个名为transport_security_state_static.json的文件,其中列出了所有预加载的 HSTS 域名。每次 Chrome 更新时,该列表也会更新。
  4. 安全增强
    Chrome 会阻止用户绕过 HSTS 网站的证书错误(例如自签名证书、域名不匹配等),显示“您的连接不是私密连接”不提供“继续前往网站”的选项(除非使用高级开发者手段)。

四、注意事项

  • 部署 HSTS 前需确保全站 HTTPS 可用,否则启用后用户可能无法访问 HTTP 资源。
  • 一旦提交到预加载列表,移除非常困难且耗时(需多个版本迭代)。
  • max-age建议至少设置为 6 个月以上(如 180 天 = 15,552,000 秒),预加载要求至少 1 年。

五 总结

HSTS 是提升 Web 安全的重要机制,通过强制 HTTPS 通信有效防御降级攻击。Chrome 通过动态策略缓存 + 内置预加载列表双重机制,全面支持 HSTS,并在用户体验和安全性之间做了严格权衡。对于高安全需求的网站,建议正确配置 HSTS 并考虑加入预加载列表。

六 Chrome 博客 default for navigation https

2021 chrome 浏览器 已经支持自动跳https

https://blog.chromium.org/2021/03/a-safer-default-for-navigation-https.html

上文章这样说 如果 用户输入 域名 没有显示指定 协议,默认会使用HTTPS, 如果 站点 暂不支持 HTTPS 协议 ,那么会降级到 HTTP 协议。

在浏览器 直接输入: www.zhiexa.com

浏览器查询 是否 缓存过域名 ,chrome://net-internals/#hsts

这个界面 可以添加 , 查询 和删除 HSTS 缓存

第二个红框 可以删除之后 ,再次查询 就无法查询到了。

Chrome 浏览器的三种 HSTS 来源

Chrome 获取 HSTS 策略的方式有三种,按优先级排序:

类型描述是否可清除
1. 预加载列表(Preload List)硬编码在 Chrome 源码中的域名列表(如 google.com, github.com)❌ 不可清除(除非等新版本发布)
2. 动态 HSTS(Dynamic HSTS)用户访问过 HTTPS 站点后,Chrome 自动启用(即使没收到 HSTS 头!)✅ 可通过chrome://net-internals/#hsts删除
3. 响应头 HSTS服务器明确返回Strict-Transport-Security✅ 可删除,过期后自动失效

当我在浏览器输入 http://www.zhiexa.com 注意协议信息HTTP

看到这里 进行一个307 的状态码,之后 Response Headers 中 有non-authoritative-reason: HSTS

这个就是浏览器的内部跳转 并没有走服务端返回。 Location: https://www.zhiexa.com

七 解释返回307的原因

现在应该弄明白 为啥 返回307 状态码了?

Chrome 获取 HSTS 策略 是动态获取的,如果浏览器曾经访问过 该域名的 HTTPS 并且成功访问了。那么就会加载到 HSTS 缓存中,通过 在浏览器中输入:

chrome://net-internals/#hsts进行查询出来。

所以在浏览器里面访问 返回的是 307 ,这是因为 浏览器走了 HSTS 缓存列表,直接进行了内部跳转 ,并没有经过后端服务进行返回301 ,这是浏览器的一个优化方案。

八 在线验证

我们来验证 一下,如何走 服务器跳转301 逻辑, 首先 要清一下浏览器的缓存,然后把hsts列表也清除一下。

在浏览器直接输入 : http://www.zhiexa.com/


此时会看到 返回了301 ,这是走到了后端的服务 然后进行的重定向操作。

然后再次在浏览器 重新访问 http://www.zhiexa.com/ , 此时就会走浏览器内部跳转 状态码 307

参考文档

chrome-blog-A safer default for navigation: HTTPS

HTTP Strict Transport Security (HSTS)

chome hsts

HTTP Strict Transport Security

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 18:35:47

K8S系列之5.3:应用健康与可观测性(探针、监控与日志)

在分布式系统中,没有可观测性的应用就像在黑暗中飞行。本章将为你构建完整的"眼睛"和"耳朵",让你不仅能及时发现故障,更能预知问题,实现真正的自动驾驶式运维。 引言:可观测性的三重维度 云原生时代,可观测性已经从"可有可无"变成"必…

作者头像 李华
网站建设 2026/6/10 9:45:01

Springboot学生选课系统576i3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:优秀教师,学生风采,学生,教师,院系信息,专业信息,课程信息,学生选课,重修报名,优秀公开课,学生成绩,班级成绩开题报告内容一、选题背景与意义1. 选题背景随着高校信息化建设的推进,传统的手工选课方式已无法满足现代教学管理的…

作者头像 李华
网站建设 2026/6/10 11:04:08

Python自动化测试福音:Chrome下载助手2.0发布!一键配置ChromeDriver路径,下载、跳转、移动全自动化

前一阵子小编推出的自研软件「Chrome下载助手」,意外地受到了不少小伙伴的喜爱。很多小伙伴评论表示:“这才是自动化该做的事情——解决真实、高频、又琐碎的日常问题”。 这里非常感谢小伙伴们的支持~的确,自动化又不是为了炫技的…

作者头像 李华
网站建设 2026/6/10 9:46:29

TL494降压转换器完整设计方案:从原理到实践的电源管理指南

TL494降压转换器完整设计方案:从原理到实践的电源管理指南 【免费下载链接】BUCK电路-TL494方案资源下载 本仓库提供了一个完整的BUCK电路设计方案,基于TL494控制芯片。该方案包含了详细的原理图、PCB设计文件以及Gerber文件,方便用户进行电路…

作者头像 李华
网站建设 2026/6/10 7:56:00

SkyReels V1 人像视频生成模型的技术拆解与实战指南

如果一只戴墨镜的猫能在泳池边当救生员,那么你也可以用一张照片或一段文字让故事动起来。SkyReels V1 的目标,就是把这种魔法装进可落地的推理框架里。 1. 项目背景:从“能生成”到“敢上线” 文本生成视频(T2V)和图生…

作者头像 李华
网站建设 2026/6/10 11:05:19

【AIGC】侧脸引起的AIGC 角色一致性崩坏

AI 绘图界有一句名言:“不要画 90 度侧脸,除非你能接受换人。” 这张图确实出现了典型的AIGC 角色一致性崩坏(Character Consistency Failure)。 虽然头发颜色(绿色)和胡子(绿色)对上了,但脸部骨骼、五官特征完全变成了另外一个人(看起来像是一个通用的西方男性模型…

作者头像 李华