首页 >后端开发 >php教程 >当 $_SERVER['HTTPS'] 未定义时如何可靠地检查 HTTPS 连接?

当 $_SERVER['HTTPS'] 未定义时如何可靠地检查 HTTPS 连接?

DDD
DDD原创
2024-12-20 16:48:13409浏览

How to Reliably Check for HTTPS Connection When $_SERVER['HTTPS'] is Undefined?

是否启用 HTTPS:解决未定义的 $_SERVER['HTTPS']

检查 $_SERVER['HTTPS'] 仍然是验证 HTTPS 连接的常用方法。但是,某些服务器上此变量中未定义的值可能会导致错误。为了解决这个问题,可以使用更可靠的替代方法。

解决方案

此代码片段可确保无论 $_SERVER['HTTPS'] 可用性如何,都可以确定 HTTPS 状态:

function isSecure() {
  return
    (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
    || $_SERVER['SERVER_PORT'] == 443;
}

说明

代码利用两个条件来确定 HTTPS status:

  • 如果定义了 $_SERVER['HTTPS'] 并且其值不是“off”,则表明连接是安全的。
  • 即使 $_SERVER[' HTTPS'] 未定义,检查 $_SERVER['SERVER_PORT'] 值 443(默认 HTTPS 端口)确认安全

此方法解决了 IIS 和 Apache 1.x 服务器的潜在问题,其中即使使用安全连接,也可能无法设置 $_SERVER['HTTPS']。

兼容性

此代码与 IIS 和 Apache 服务器兼容。此外,需要注意的是,它会检查负载均衡器和服务器之间的连接。对于客户端和负载均衡器之间的连接,可以使用 HTTP_X_FORWARDED_PROTO 标头,尽管它需要更复杂的实现。

以上是当 $_SERVER['HTTPS'] 未定义时如何可靠地检查 HTTPS 连接?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn