首页 > 解决方案 > HSTS 预加载不同的结果

问题描述

在我拥有的一个站点上Header set Strict-Transport-Security "max-age=31536000" env=HTTPS,这足以预加载 HSTS,但我的.htaccess文件中完全相同的代码段不允许在另一个站点上预加载。我已经Header set Strict-Transport-Security: "max-age=31536000; includeSubDomains; preload" env=HTTPS解决了这个问题,但我想知道为什么较短的版本可以工作并预加载第一个站点而不是第二个站点?

任何见解将不胜感激。

标签: apache.htaccesssslpreloadhsts

解决方案


为什么较短的版本有效

简短的版本不可能“工作”。实施 HSTS 就足够了,但没有被HSTS 预加载列表接受。

您的配置中的其他内容必须已发送完整的标头。

确认实际发生了什么的唯一方法是记录在请求中发送的 HTTP 请求/响应标头,而不是通过 ( .htaccess?) 配置文件中的指令。

即使您发布的指令本身也不一定足够。您必须有一些设置HTTPS环境变量的东西(这与HTTPS 服务器变量不同)。如果您有从 www 到非 www 的规范重定向(反之亦然),那么您将缺少在always301 重定向(仅限 HTTPS)上设置标头的参数 - 这也是“预加载列表”的要求。

在服务器配置中实现 HSTS“预加载”要容易得多且不易出错。如果您只能访问,.htaccess那么我会犹豫是否要提交“预加载列表”。

另请参阅对 CodeReview SE 上以下相关问题的回答:


推荐阅读