HTTPS检测-这两种方法的优缺点


https detection - pros/cons to these two methods

我想有"智能"检测https/http的资源,我在我的网页内链接。基本上,如果页面需要一个有效的ssl,我只能把https href .

选项1

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

选项2(使用 // http:// https:// )

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

选项3使用 https 所有
我有什么理由不使用https吗?

与协议相关的//是处理此问题最直观的方法。但是,我不确定旧的浏览器是否普遍支持它。

<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") {}

选项1:这不是健壮的。有人不太可能在80端口上使用SSL,但这是可能的。

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

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