http?https?相对协议? // 相对协议 相对协议的主要作用是根据当前页面的协议(HTTP或HTTPS)来自动选择使用哪个协议来加载资源。

zblog2年前zblog问题解答37

相对协议的主要作用是根据当前页面的协议(HTTP或HTTPS)来自动选择使用哪个协议来加载资源。

当你在HTML中使用一个以//开头的URL时,浏览器会检查当前页面是通过HTTP还是HTTPS加载的,并相应地使用http://https://来补全URL。

例如,如果你的页面是通过https://加载的,那么<img src="//example.com/image.png">将被浏览器解析为https://example.com/image.png


采用相对协议的网站确实需要同时支持HTTP和HTTPS,以便能够正确地响应来自不同协议(HTTP或HTTPS)的请求。

相对协议(以//开头的URL)的设计初衷就是为了让网站能够灵活地适应当前页面的协议,从而无需为HTTP和HTTPS分别提供不同的URL。这意味着,当用户通过HTTP或HTTPS访问网站时,网站上的资源(如图片、脚本、样式表等)都会根据当前页面的协议来加载。

因此,如果网站采用了相对协议,并且只支持HTTP或只支持HTTPS,那么在某些情况下,用户可能会遇到资源加载失败的问题。例如,如果网站只支持HTTPS,但用户通过HTTP访问了网站,并且网站上的资源使用了相对协议,那么这些资源将尝试通过HTTPS加载,但如果服务器没有配置为接受HTTP到HTTPS的重定向,或者重定向配置不正确,那么这些资源就可能无法加载。

为了避免这种问题,采用相对协议的网站应该同时支持HTTP和HTTPS。这通常意味着网站需要配置SSL/TLS证书以支持HTTPS,并且需要确保服务器能够正确处理来自HTTP和HTTPS的请求,包括进行必要的重定向和提供正确的内容。

此外,值得注意的是,随着网络安全性的日益重要,越来越多的网站正在逐步淘汰HTTP,只支持HTTPS。因此,即使网站采用了相对协议,也建议优先考虑支持HTTPS,并在可能的情况下将HTTP请求重定向到HTTPS。这有助于保护用户数据的安全,并避免潜在的中间人攻击。

=============


http?https?相对协议?

从目前的使用量上来说,http 协议仍然是主流,但是越来越多的站长、公司开始采用 https 协议了。

针对目前的情况,我们将 BootCDN 上所有链接的协议默认设置为“相对协议”,也就是链接以 // 开头,前面去掉了 http: 或 https: 字样,这样做的好处是浏览器能够根据你的网站所采用的协议来加载 BootCDN 上托管的文件。

例如:你的网站用的是 https 协议,那么加载 Bootstrap 的 CSS 文件 //cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css 时,浏览器就会自动通过 https 协议加载这个文件,也就是等效于 https://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css

所以,对于广大用户来说,我们建议采用“相对协议”,这样无论今后是采用 http 还是 https 协议,都不用再次修改文件的链接地址了。

注意:由于“相对协议”的相对特性,对于本地文件的访问就有一个“坑”:比如,你在电脑上保存了一个 index.html 的页面,这个页面中引用了 BootCDN 上的某个文件,并且是以“相对协议”引入的,某天你想看一下这个文件的话,直接拖拽到浏览器里,发现引用的文件无法加载!!!其实,这就是相对协议的特性了,因为你浏览本地文件时,浏览器采用的是 file: 协议,所以浏览器将以 file: 协议来加载 BootCDN 上的文件了,这当然就找不到了。

小办法解决大问题

从长远看,https 协议是大势所趋,但是目前 http 是主流,所以我们采用了折中方案 – 相对协议。但是统一采用这种方式显得太一刀切了,所以我们在页面上提供了一个小功能:“协议选择开关”。如下图:

这个“协议选择开关”位于 BootCDN 网站上每个页面右上方的位置。对于希望明确协议类型的同学可以通过这个开关选择适合自己的协议类型。比如,你的网站已经完全拥抱 https 协议了,那么所有链接都用 https 协议就是最好的选择!

这个“协议选择开关”是针对浏览器记忆你所选的协议的,所以,只要你下次还用同一个浏览器打开 BootCDN 网站,你的选择就能继续有效。我们觉得最方便的是,这一功能无需注册、登录这些繁琐步骤。




相关文章

array_values 数组的值 使用 array_values 函数获取数组的所有值 array_values 函数返回数组中所有的值,不包含键。

使用 array_values 函数获取数组的所有值array_values 函数返回数组中所有的值,不包含键。...

(phpsession)php session 增改删的例子 名字叫 baijiahao

当使用 PHP 会话(session)来存储、修改和删除名为 baijiahao 的数据时,你可以按照以下步骤进行操作:启动会话首先,你需要在每个需要使用会话的 PHP 脚本中启动会话。这通常是通过调...

查询文章最大ID(无默认0)

# 查询正式文章最小ID (无文章默认为0) $max_id = $zbp->db->Query(    &nbs...

页面全屏 弹出框

<!DOCTYPE html> <html lang="en"> <head>    &...

python 并发执行 python 带参数的函数 比如 aaa(1) 参数是变化的 如从1到10 怎么并发 执行 a(1) 到A(10)

在Python中,你可以使用concurrent.futures模块中的ThreadPoolExecutor或ProcessPoolExecutor来并发执行函数。以下是一个使用ThreadPoolE...