我想对我在网页中链接的资源进行“智能”检测https / http。基本上如果页面需要有效的ssl,我只能放置https
href。
选项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://
或 https://
)
<script type="text/javascript" src="//myUri.com/script.js"></script>
选项3 https
用于所有内容
有什么理由我不应该只为所有事情使用https吗?
答案 0 :(得分:5)
协议相对//
是处理此问题的最直观方式。但是,我不确定它是否受到旧版浏览器的普遍支持。
<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 :(得分:1)
选项1:这不健全。不可能有人通过端口80进行SSL,但这是可能的。
选项2:这是强大,简单和安全的。使用它。
选项3:如果您对所有脚本使用SSL,而不是页面,那么您将获得混合内容警报。通过SSL提供所有内容将对缓存和性能产生影响(但对于需要用户登录的站点的任何部分通常都是个好主意。)