为了保证用户数据的安全性、避免中间运营商的劫持,部署 https 已成当务之急。https 早已不是锦上添加的可有可无项,它已经逐渐成为 WEB 服务的标配。那么什么是 https 呢,https 与 http 的区别在哪儿,我们作为前端在部署 https 时应该注意什么呢? 我们传统使用的 http 是 http1.0,是基于 TCP/IP 的应用层协议,浏览器的每次请求都需要与服务器建立一个 TCP 连接,服务器完成请求处理后立即断开 TCP 连接,服务器不再跟踪之前的请求。这种方式优点是: 但 http 还有着更明显的缺点,导致使用 http 协议的不安全: 正是因为 http 存在着不足的地方,才需要一个更安全的协议来保证数据在传输过程中安全。 https 报文中的任何东西都被加密,包括所有报头和荷载。一个攻击者所能知道的只是两者之前有一个连接而已。 在我们通常使用的 http 协议里,信息都是使用明文的方式传输的,那么中间的运营商就有可能在信息上做手脚。 运营商劫持主要有三种方式: 万一在遇到运营商劫持的情况时,有哪些应对方案呢 SPDY 是 google 开发的基于传输控制协议(TCP)的应用层协议,SPDY 协议旨在通过压缩、多路复用和优先级来缩短网页的加载时间和提高安全性。(SPDY 是 speedy 的昵音,意为更快) SPDY 协议只在性能上对 http 做了很大的优化,其核心思想是尽量减少连接个数,而对于 http 的语义并没有做太大的修改。具体来说是,SPDY 使用了 HTTP 的方法和页眉,但是删除了一些头并重写了 HTTP 中管理连接和数据转移格式的部分,所以基本上是兼容 HTTP 的。 HTTP 的 GET 和 POST 消息格式保持不变,即现有的所有服务端应用均不用做任何修改。 SPDY 协议的优点: 在 https 的页面里,是不能有 http 链接存在的,在 chrome 下依然会请求服务器,但会在控制台给出警告;在 firefox 下直接拒绝请求,可能会知道页面混乱或报错。 具体的操作是: 我们尽量保证 https 页面里不含有 http 的链接,但是人工检查难免有疏漏的,因此写了一个 js 脚本用来检测页面中 http 连接的数量: 这个脚本能在页面加载完成后,扫描页面中的资源,检测其链接是否为 http 类型,且只在 https 的页面中,开关打开的情况下才运行,统计各个资源里 http 的个数。不过更详细的信息还不太好获取到,比如:链接为 http 类型的资源在页面中的第几行,ajax 请求的链接等信息。 HTTP/2 主要基于 SPDY 协议,不过还是有区别的, http/2 支持明文 http 传输,而 SPDY 强制使用 https。 HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。 http2 特点是: 那么在未来的 http2 下,我们前端需要做些什么呢? 如果还有什么不足,欢迎指出批评,谢谢。1. http 与 https 的区别 #
https=http+加密+认证+完整性保护
,https 就是 http 的安全升级版。
HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密。2. 运营商劫持 #
3. SPDY #
SPDY 与 http 的关系:
4. 在迁移到 https 的过程中,我们应该做些什么 #
因此,在 https 的页面里,我们要确保所有的内部链接全部指向 https,确保已经在页面到页面级别制定了新的 https 网址。
(function () {
var tags = ["link", "script", "img", "audo", "video", "frame"], // 遍历的资源
host_protocol = window.location.protocol.replace(":", ""), // 当前页面的协议
flag = true; // 是否打开上传
if (host_protocol == "https" && flag) {
var a = document.createElement("a"),
result = "";
for (var i = 0, len = tags.length; i < len; i++) {
var item = document.getElementsByTagName(tags[i]),
num = 0;
for (var j = 0, t = item.length; j < t; j++) {
var c = item[j];
var url =
c.getAttribute("href") || c.getAttribute("src") || c.href || c.src;
if (url) {
a.href = url;
var protocol = a.protocol.replace(":", "");
// var protocol = url.substr(0, 5);
if (protocol == "http") {
num++;
}
}
}
num && (result += tags[i] + "=" + num + "|");
}
result = result.substring(0, result.length - 1);
// console.log( result );
// console.log( encodeURIComponent(result) );
var img = new Image();
img.src = "http://www.qq.com/s.gif?q=" + encodeURIComponent(result);
img.onload = img.onerror = function () {
img = null;
};
}
})();
5. http2 展望 #
版权属于:
加速器之家
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论