只要在 URL 中指定 https,%{HTTPS} 变量是否就处于打开状态?

只要在 URL 中指定 https,%{HTTPS} 变量是否就处于打开状态?

在 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 上仍然不可用)。

相关内容