【问题标题】:https detection - pros/cons to these two methodshttps 检测 - 这两种方法的优缺点
【发布时间】:2011-11-01 06:53:02
【问题描述】:

我希望对我在页面中链接的资源进行 https/http 的“智能”检测。基本上如果页面需要有效的ssl,我只能放httpshref的。

选项 1(使用 PHP)

<?php
if ( $_SERVER["SERVER_PORT"] == "80" ) {
    $http = "http";
} else {
    $http = "https";
}
?>
<script type="text/javascript" src="<?=$http?>://myUri.com/script.js"></script>

选项 2(使用 // 而不是 http:// OR https://

<script type="text/javascript" src="//myUri.com/script.js"></script>

选项 3 使用 https 适用于一切
有什么理由我不应该只使用 https 吗?

【问题讨论】:

  • 关于“我有什么理由不应该对所有事情都使用 https 吗?”一方面它要慢得多。

标签: php html http https


【解决方案1】:

相对于协议的// 是最直观的处理方式。不过,我不确定旧版浏览器是否普遍支持它。

<script type="text/javascript" src="//myUri.com/script.js"></script>

但在 PHP 中,您不应该检查 $_SERVER["SERVER_PORT"] == "80",因为您可能在某些时候需要在 80/443 以外的端口上运行您的 Web 服务器,例如在开发中。相反,检查HTTPS 服务器变量的内容:

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

【讨论】:

  • 嗯,1995 年 6 月 rfc1808 发布。当时的浏览器甚至不支持虚拟主机,所以... :)
  • 我经常使用这一行来获取我自己的绝对位置(减去查询字符串等),并且(至少在 Apache 和 NginX 下)每次都能完美运行,包括获取正确的端口:$__SELF = ((isset($_SERVER['HTTPS']) &amp;&amp; ($_SERVER['HTTPS']) &amp;&amp; strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; .请注意,我不会将 $_SERVER['HTTPS'] 与 'on' 进行比较,我将其作为布尔值进行测试并确保它不是 'off' - 这是在 1 个特定实例之后,它在 HTTPS 时不断出现不应该……
【解决方案2】:

选项 1:这并不可靠。不太可能有人会通过端口 80 进行 SSL,但有可能。

选项 2:这是稳健、简单且安全的。使用它。

选项 3:如果您对所有脚本使用 SSL,而不是页面,那么您将收到混合内容警报。通过 SSL 提供您的所有内容将对缓存和性能产生影响(但对于需要用户登录的网站的任何部分通常是一个好主意)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2017-10-13
    相关资源
    最近更新 更多