在 Apache HTTP Server 手册中提到
如果连接使用 SSL/TLS,则包含文本“on”。
这是否意味着仅当 SSL/TLS 连接完全建立且握手成功完成时,它才处于“开启”状态?还是意味着只要请求者在 URL 中指定“https”并启动 SSL/TLS 连接,它就处于“开启”状态?
因为我有许多 VH(一些 http,一些 https),并且想通过在所有 VH 之外和之前放置一个条件检查来节省精力,使用 %{HTTPS} 添加严格传输安全响应标头。我想知道,如果请求者在不支持 https 的 VH 的 URL 中指定了“https”,条件检查是否仍会在错误响应中添加严格传输安全标头。
答案1
我想知道,如果请求者在不支持 https 的 VH 的 URL 中指定了“https”,条件检查是否仍会在错误响应中添加严格传输安全标头。
如果虚拟主机不支持 HTTPS,则连接将失败,并且浏览器将不会获得 HTTP 响应,因此无法返回任何 HTTP 标头。
因此,您可以安全地基于该 HTTPS 变量添加 HSTS。
或者如果仍然担心,那么只需将其添加到 HTTPS 虚拟主机配置中,而不是顶级配置中。这是我的首选选项,因为它允许每个虚拟主机使用不同的 HSTS 标头(例如,如果您尚未准备好在includeSubDomain
顶级域中使用属性,因为某些子域在 HTTPS 上仍然不可用)。