这里说明两个问题:
1. https的页面里“包含”http的内容,将会被提示
注意:这里的“包含”是这么理解的,是指打开该https页面时读取到http的内容,如: src属性 ,flash object的codebase属性等,不要以为a标签的href属性指向了http的链接就是不安全的,因为在该https页面他只是显示,没有读取里面的内容,所以不是不安全元素。
2. https到http跳转时的提示
其实,从https到http跳转有多种方式,而且一般来讲,只要不将安全页面里的内容扔给不安全页面或不在安全页面里读取不安全页面的内容都是没有问题的,显然,在安全页面里的一个form要提交到不安全页面是违反原则的,一般要提示;另外,浏览器的选项里一般可以设置,从https到http的简单的跳转也可以设置成提示的;
下面给出几种跳转方式:
$url = "http://phpor.net/target.php";
switch($_GET["t"]) {
case "h":
header("Location: $url");
break;
case "m":
echo "<meta http-equiv=’refresh’ content=’2; url=$url’>";
break;
case "l":
echo "<script>location.href=’$url’;</script>";
break;
case "f":
echo "<form id=’f’ action=’$url’ ></form>";
echo "<script>window.onload= function () {document.getElementById(‘f’).submit();}</script>";
break;
case "l2":
echo "<script>location.href=’$url’;</script>";
break;
default:
echo "<a href=’?t=h’>header redirect</a><br />";
echo "<a href=’?t=m’>meta redirect</a><br />";
echo "<a href=’?t=l’>location.href redirect</a><br />";
echo "<a href=’?t=f’>form redirect</a><br />";
echo "<a href=’?t=l2′>location.replace redirect</a><br />";
echo "<br /><br />";
echo "结论:只有使用form的action的方式在firfox下跳转有提示,在ie7下也没有提示,其他几种跳转方式在ie7和firfox下都没有提示";
echo "<br>firfox 提示:虽然此页已被加密,但您输入的信息将通过未加密的连接来发送,极容易被第三方看到。您确定要继续发送此消息吗?";
echo "<br /><br />";
echo "由此看来,提示不是源于跳转,而是读取不安全的数据,没有在安全的页面里读不安全的数据将不会被提示的";
break;
}