【问题标题】:Why is PHP's "SERVER_PROTOCOL" showing HTTP/1.1 even when using https?为什么即使使用 https,PHP 的“SERVER_PROTOCOL”也显示 HTTP/1.1?
【发布时间】:2013-05-25 09:12:27
【问题描述】:

地址栏显示“https://mywebsite.com”并显示一个锁形图标(点击它显示它是 AES-256),但是当我运行以下代码时,它总是打印“HTTP/1.1”。

echo $_SERVER[ "SERVER_PROTOCOL" ];

为什么不显示 https?

【问题讨论】:

    标签: php https


    【解决方案1】:

    SERVER_PROTOCOL 与页面的安全性无关,它会报告所使用的连接是 HTTP 1.0 还是 HTTP 1.1 还是 HTTP 2.0:

    http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

    HTTP/1.1 是原始 HTTP (HTTP/1.0) 的修订版。在 HTTP/1.0 中 为每个资源建立到同一服务器的单独连接 要求。 HTTP/1.1 可以重用一个连接多次下载 页面完成后的图像、脚本、样式表等 发表。因此,HTTP/1.1 通信的延迟更少 因为 TCP 连接的建立提出了相当大的 开销。

    虽然 HTTP 2.0 是下一代 HTTP,它允许在一个 HTTP 2.0 连接中多路复用多个 HTTP 1.1 连接。

    出于您的目的,请检查是否设置了 HTTPS 服务器变量:

    http://php.net/manual/en/reserved.variables.server.php

    即像

    if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { ... }
    

    【讨论】:

    • 警告:$_SERVER['HTTPS'] 可以设置但包含字符串off
    • 不过,这不适用于 cronjobs / CLI 脚本。
    猜你喜欢
    • 2011-11-05
    • 2017-07-14
    • 1970-01-01
    • 2013-08-04
    • 2017-05-30
    • 2019-05-14
    • 2016-01-24
    • 1970-01-01
    • 2014-02-26
    相关资源
    最近更新 更多