我们的服务遍布中国

我们的服务遍布中国
乃至世界

光网所服务的品牌地域与城市
北京 天津 上海 广州 深圳 香港 厦门 江苏 浙江 山东
重庆 长沙 武汉 成都 西安 宁夏 丽江 青海 云南 乌鲁木齐
黑龙江 内蒙古 河北 ...
光网服务与合作的全球各地
美国 加拿大 德国 法国 英国 瑞士 意大利 荷兰
印度 日本 韩国 ...

不论你的品牌在何处
我们都可以提供完善的服务与帮助

致电

0512-56969630
您所在的位置:首页 > SSL证书

使用相对Url无缝切换HTTP-HTTPS

发布时间:2017/2/22 20:11:40 浏览:1184打印字号:

概述

在HTTPS的网站下,如果要访问HTTP资源,那么一般浏览器会弹出窗口询问用户是否允许加载不安全内容,云云。为了避免出现这样干扰用户的情况,所有网页下请求的资源都都必须是HTTPS资源。如果你的站点支持HTTP和HTTPS两种方式访问,而实际网站只有一份的话,这种情况下,你可以使用相对Url的方式改写网页内资源的请求Url。

省略Scheme的相对Url语法

Url相对路径我们并不陌生,下面这样的写法非常常见。

forum_201606_06_2145208e999bxle0x7waxe.png


如果该HTML代码放在http://myexample.com/myblog/index.html上,那么第一幅图片的实际完整地址就是

http://myexample.com/images/myphoto.jpg

而第二幅图片的实际地址是

http://myexample.com/myblog/myphoto.jpg

但是省略Url中的Scheme部分这样的相对路径写法却比较少见。例如:
forum_201606_06_214521679796mzbt67wzfk.png
这行代码如果放在HTTP的网页上,那么请求的资源就是

HTTP://myimagehosting.com/images/myphoto.jpg

如果放在HTTPS上,则访问的资源就是HTTPS的。这样一来我们就无需为HTTP和HTTPS各自准备不同的网页了。

标准规范

RFC1808文档是专门针对相对URI的,其中提到,除了URI中的Scheme部分,其他部分均可以做适当的省略。也就是说,这样的写法是不符合规范。RFC1808文档是95年的时候定稿的。后来的RFC3986文档对URI做出了更为详细的规范,废弃了RFC1808对相对URI引用的建议规范(4.2 Relative Reference一节)。

以Scheme:开头的(如http:、file:、ftp:)均为绝对URI引用。否则为相对URI引用。

相对路径 = 相对部分 [ "?" 查询参数] [ "#" 锚点]


其中相对部分可以有以下几种情况:
1. //主机域 绝对路径或者留空
2. 绝对路径
3. 相对路径
4. 留空

也就是说,以下几种情况均是合法的相对URI引用:
forum_201606_06_214523akhh17h6pbl75ho9.png总结

以上这种省略Scheme部分的相对路径的写法在IE7、IE8、Firefox、Chrome、Opera以及Safari中均测试通过。pconline上面就有用到这样的写法。使用这个特性,可以降低代码的复杂性。Google Analytics在生成代码的时候会检测当前协议来决定加载http还是https的脚本,然后动态插入一段脚本。不知道为什么它不使用这样的方式来实现自适应。

参考文档:
http://nedbatchelder.com/blog/200710/httphttps_transitions_and_relative_urls.html
http://www.ietf.org/rfc/rfc3986.txt