2026/1/22 21:48:41
网站建设
项目流程
内购券网站开发,wordpress不能搜索文章,重庆企业网站的推广,淘宝详情页设计一个多少钱文章目录为啥网站跳转重定向是307 而不是 301 呢#xff1f;为什么出现307 状态码呢#xff1f;一 HSTS 是什么#xff1f;二 HSTS 如何生效#xff1f;三、Chrome 浏览器如何支持 HSTS#xff1f;四、注意事项五 总结六 Chrome 博客 default for navigation https七 解释…文章目录为啥网站跳转重定向是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并且状态码是301apiVersion: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:Prefixsaas-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:truegeneration:6labels:alb.ingress.kubernetes.io/hash:93c8bcd145bac5c5dba55d40817545f8d44cfa3475b7eca1091967e3ingress-controller:alb-5name:saas-alb-5-ingressnamespace:prodresourceVersion:303452590uid: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 跳到 httpscurl-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 这个协议。HSTSHTTP Strict Transport SecurityHTTP 严格传输安全是一种 Web 安全策略机制用于强制浏览器仅通过 HTTPS 与服务器通信防止中间人攻击如 SSL 剥离、会话劫持等。一 HSTS 是什么HSTS 是由服务器通过 HTTP 响应头Strict-Transport-Security向浏览器宣告的一种安全策略。一旦浏览器接收到该响应头并成功通过 HTTPS 访问网站就会在指定的时间内由max-age参数控制自动将所有对该站点的 HTTP 请求升级为 HTTPS即使用户手动输入http://或点击 HTTP 链接。示例响应头Strict-Transport-Security: max-age31536000; includeSubDomains; preloadmax-age31536000表示 HSTS 策略有效期为 1 年单位秒。includeSubDomains可选表示该策略适用于所有子域名。preload可选表示该站点希望被加入浏览器的HSTS 预加载列表见下文。二 HSTS 如何生效首次访问必须是 HTTPSHSTS 只有在用户第一次通过 HTTPS 成功访问网站后才会被浏览器记录。如果用户首次通过 HTTP 访问则无法获得 HSTS 头仍可能遭受中间人攻击。浏览器缓存策略浏览器会将 HSTS 策略缓存在本地通常按站点存储在max-age时间内所有对目标域名及子域若包含includeSubDomains的请求都会被自动转为 HTTPS。HSTS 预加载Preload机制为解决“首次访问”问题主流浏览器如 Chrome、Firefox、Edge维护一个内置的 HSTS 预加载列表Hardcoded List。网站可以主动提交到 https://hstspreload.orgChrome 主导审核通过后会被编译进浏览器代码中。这样即使用户从未访问过该网站浏览器也会强制使用 HTTPS。三、Chrome 浏览器如何支持 HSTSChrome 对 HSTS 的支持非常完善具体包括自动升级 HTTP → HTTPS如果某个域名已在 Chrome 的 HSTS 列表中无论是通过响应头动态添加还是预加载列表用户输入http://example.com时Chrome 会在发起网络请求前就内部重写为https://example.com不会发出任何 HTTP 请求。HSTS 缓存管理用户可通过chrome://net-internals/#hsts页面查询或手动添加/删除 HSTS 条目主要用于调试。清除浏览数据特别是“Cookie 和其他站点数据”会清除动态添加的 HSTS 策略但不会清除预加载列表中的条目。预加载列表集成Chrome 的源码中包含一个名为transport_security_state_static.json的文件其中列出了所有预加载的 HSTS 域名。每次 Chrome 更新时该列表也会更新。安全增强Chrome 会阻止用户绕过 HSTS 网站的证书错误例如自签名证书、域名不匹配等显示“您的连接不是私密连接”且不提供“继续前往网站”的选项除非使用高级开发者手段。四、注意事项部署 HSTS 前需确保全站 HTTPS 可用否则启用后用户可能无法访问 HTTP 资源。一旦提交到预加载列表移除非常困难且耗时需多个版本迭代。max-age建议至少设置为 6 个月以上如 180 天 15,552,000 秒预加载要求至少 1 年。五 总结HSTS 是提升 Web 安全的重要机制通过强制 HTTPS 通信有效防御降级攻击。Chrome 通过动态策略缓存 内置预加载列表双重机制全面支持 HSTS并在用户体验和安全性之间做了严格权衡。对于高安全需求的网站建议正确配置 HSTS 并考虑加入预加载列表。六 Chrome 博客 default for navigation https2021 chrome 浏览器 已经支持自动跳httpshttps://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. 动态 HSTSDynamic 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: HTTPSHTTP Strict Transport Security (HSTS)chome hstsHTTP Strict Transport Security