二狗子是某不知名网站的站长,他热衷于通过博客分享日常的一些工作、生活、技术等,立志要成为夜空中最靓的仔。

但是前段时间有几个用户反馈,网站总是莫名会跳转到一个 xx 网站,除此之外访问速度也有点慢。作为夜空中最靓的仔,怎么可能会让劫持这种事情困扰用户,于是全站快速启用了 HTTPS。网站是安全了,但是有什么办法可以加快访问速度,二狗子再一次陷入了沉思。

HSTS

一个夜深人静的夜晚,二狗子开始深入研究 HTTPS 。他从维基百科查找了 HTTPS 的传输过程,只有熟悉了整个过程才能更好了解如何优化 HTTPS。

二狗子想着 HTTPS 虽然已经启用,但是无法确认用户是直接访问 http:// 还是 https:// ,按照普遍的用户习惯都是直接输入站点域名,再由浏览器直接补充协议类型。但是这就存在一个问题,如果在网站设置当用户访问域名的时候强制 https 进行 301 或者 302 跳转,但是这个过程中使用到 HTTP 因此容易发生劫持,受到第三方的攻击。

有什么更好的办法来避免这种情况呢?话说有矛就有盾,二狗子深入研究发现 HSTS 是可以避免这种情况。

HSTS 是国际互联网工程组织 IETF 正在推行一种新的 Web 安全协议,网站采用 HSTS 后,用户访问时无需手动在地址栏中输入 https://,浏览器会自动采用 HTTPS 访问网站地址,从而保证用户始终访问到网站的加密链接,保护数据传输安全。

HSTS 主要是通过服务器发送响应头的方式控制浏览器操作;

  1. 首先在服务器响应头中添加:
    Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]
  2. 设置 max-age 参数,最长建议设置 6 个月;
  3. 当用户下次使用 http 访问,客户端就会进行内部 307 跳转;

开启 HSTS 可以有效防范攻击,同时省去 301/302 跳转时间,大大提升网站安全系数和用户体验。

HTTP/2

开启 HSTS 后,二狗子更加兴奋,决定不睡觉继续深入研究。

二狗子在 IT 界混了那么久,最近频频听说 HTTP/2,但并不了解 HTTP/2 有哪些“威武”的地方,于是又开启了研究之旅。

HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议。它由互联网工程任务组(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小组进行开发。该组织于 2014 年 12 月将 HTTP/2 标准提议递交至 IESG 进行讨论,于 2015 年 2 月 17 日被批准。HTTP/2 标准于 2015 年 5 月以 RFC 7540 正式发表。

HTTP/2 相比较 HTTP 1.1 有以下几个改变:

  1. 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。
  2. 采用多路复用,代替原来的序列和阻塞机制。所有就是请求的都是通过一个 TCP 连接并发完成。
  3. 服务器推送,服务端可以在发送页面 HTML 时主动推送其它资源,而不用等到浏览器解析到相应位置,发起请求再响应。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求。服务端可以主动推送,客户端也有权利选择接收与否。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送 RST_STREAM 帧来拒收。主动推送也遵守同源策略,服务器不会随便推送第三方资源给客户端。
  4. 头部压缩,HTTP/2 对消息头采用 HPACK(专为 HTTP/2 头部设计的压缩格式)进行压缩传输,能够节省消息头占用的网络的流量。

HTTP/2 到底有多快,有一个 HTTP 1.1 VS HTTP/2 的演示 demo,二狗子看到之后兴奋的睡不着觉。

按照这样优化下去,二狗子的网站访问速度马上就要起飞了。

TLS 1.3

二狗子突然想到,SSL 版本已经发布到 TLS 1.3,它是 TLS 协议中最新、最快和最安全的版本,相比旧版的 TLS 协议增加了多项新功能。通过简化 SSL 握手流程,提高了连接速度,减少了延迟,并通过移除有安全隐患的加密算法,提高了用户访问的性能、效率和安全性等等。

为了更好的了解 TLS 1.3 是如何工作的,二狗子又开始了新的学习之旅。

从上图可以看出,使用 TLS 1.2 需要两次往返( 2-RTT )才能完成握手,然后才能发送请求。

TLS 1.3 的握手不再支持静态的 RSA 密钥交换,这意味着必须使用带有前向安全的 Diffie-Hellman 进行全面握手。从上图可以看出,使用 TLS 1.3 协议只需要一次往返( 1-RTT )就可以完成握手。

相比 TLS 1.2,TLS 1.3 的握手时间减半。这意味着访问一个移动端网站,使用 TLS 1.3 协议,可能会减少将近 100ms 的时间。

“不是 HTTPS 让网站变慢,而是网站优化的不够”,二狗子发出深深的感慨。经过一夜的努力,终于给博客开启了 HSTS、HTTP/2 和 TLS 1.3,二狗子感觉自己成为了博客界最靓的仔。d但是二狗子不知道的是,又拍云提供一站式 SSL 证书申请服务,HSTS、HTTP/2.0、TLS 1.3 等功能一键即可开启,分分钟就能让HTTPS快上加快。

推荐阅读:

当 “HTTP” 先生遇上“S”小姐

TLS 1.3 VS TLS 1.2,让你明白 TLS 1.3 的强大

夜空中最靓的二狗子是如何让 HTTPS 快上加快的?的更多相关文章

  1. 二狗子 、初恋及HTTPS

    最近二狗子宅在老家,最悠闲的就是泡壶茶看着院子的风景发呆一下午.今天,二狗子看到了对面自己暗恋的小翠花,看着美好的小翠花二狗子不禁想起了自己美好的初恋. 二狗子的初恋在初中,那个时候学校禁止带手机.上 ...

  2. 受到 1 万点暴击,二狗子被 DDoS 攻击的惨痛经历

    二狗子的遭遇 “好消息,好消息,免费 DDoS 攻击软件上线了,性感黑客在线攻击,帮您攻克所有商业难题.”二狗子不知道在看着什么网站,新买的 Mac 中发出热闹的声音. 二狗子想知道“DDoS 是什么 ...

  3. 第一次亲密接触——二狗子初识 CDN

    二狗子是国内知名XXX大学的在校学生,作为一名编程爱好者,他利用业余时间搭建了一个网站,把平时的学习心得和技术分享全都 PO 在自己的网站上.渐渐地,二狗子的网站因为文章质量高,技术分享全面,受到了很 ...

  4. 【MySQL】记一次线上重大事故:二狗子竟然把线上数据库删了!!

    写在前面 估计二狗子这几天是大姨夫来了,心情很郁闷,情绪也很低落,工作的时候也有点心不在焉.让他发个版本,结果,一行命令下去把线上的数据库删了!你没听错:是删掉了线上的数据库!运营那边顿时炸了锅:怎么 ...

  5. 【Spring注解驱动开发】二狗子让我给他讲讲@EnableAspectJAutoProxy注解

    写在前面 最近,二狗子入职了新公司,新入职的那几天确实有点飘.不过慢慢的,他发现他身边的人各个身怀绝技啊,有Spring源码的贡献者,有Dubbo源码的贡献者,有MyBatis源码的贡献者,还有研究A ...

  6. iOS10 导航条,这个二狗子变了...踩坑

    1.iOS10导航透明要转换一个透明image UIImage *image = IsDeviceVersionIOS10 ? [WeUtils imageWithColor:[UIColor cle ...

  7. 超详细的编码实战,让你的springboot应用识别图片中的行人、汽车、狗子、喵星人(JavaCV+YOLO4)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. MySQL中的DML、DQL和子查询

    一.MySQL中的DML语句 1.使用insert插入数据记录: INSERT INTO `myschool`.`student` (`studentNo`, `loginPwd`, `student ...

  9. Java中的集合(二)单列集合顶层接口------Collection接口

    Java中的集合(二)单列集合顶层接口------Collection接口 Collection是一个高度封装的集合接口,继承自Iterable接口,它提供了所有集合要实现的默认方法.由于Iterab ...

随机推荐

  1. 随机点名可视化界面,记录迟到人员,转exe文件

    随机点名可视化界面,记录迟到人员,转exe文件 一.介绍 对于人员采取随机点名 二.代码 import datetime import random from tkinter import * fro ...

  2. David与Vincent的博弈游戏[树型DP]

    \(\mathcal{Description}\) \(\mathcal{Solution}\) 根据题意,我们知道 根节点深度为1,深度为 奇数 的节点由\(David\)移动,我们称为\(D\)点 ...

  3. tomcat用做图片服务器

    最近做了个小网站,就是用tinyce富文本编辑器,https://www.511easy.com/ 保持字体排版和图片 发现博客园的图片,一天之后就无法显示 就想着自己做一个图片服务器,上传图片到指定 ...

  4. python函数闭包-装饰器-03

    可调用对象 callable()  # 可调用的(这个东西加括号可以执行特定的功能,类和函数) 可调用对象即  callable(对象)  返回为  True  的对象 x = 1 print(cal ...

  5. 性能测试-loadrunner参数化

    工具:loadrunner11 ie8 场景:不同用户的登录 1.参数化功能: 让脚本使用批量的变化的数据测试,实现模拟不同数据/用户的行为 函数格式:返回值类型 函数名称(参数类型 参数,参数类型 ...

  6. [Abp vNext 源码分析] - 6. DDD 的应用层支持 (应用服务)

    一.简要介绍 ABP vNext 针对于应用服务层,为我们单独设计了一个模块进行实现,即 Volo.Abp.Ddd.Application 模块. PS:最近博主也是在恶补 DDD 相关的知识,这里推 ...

  7. PowerBI Desktop中如何能实现点击按钮跳转到相应报表页

    我看到过一个报表首页,它将其他报表业存为一种类似URL的方式,按住Ctrl点击鼠标右键即可跳到相应的报表业. 当时我理解成了是“分页报表”的功能实现的,弄明白后发现是由按钮+书签的方式是实现的. 实现 ...

  8. js - 原生ajax访问后台读取数据并显示在页面上

    1.前台调用ajax访问后台方法,并接收数据 <%@ page contentType="text/html;charset=UTF-8" language="ja ...

  9. vue中el-upload上传多图片且携带参数,批量而不是一张一张的解决方案

    现在前端基本不是vue技术栈就是react技术栈. vue技术栈最常用的就是element-ui的ui框架了. 在项目中,我们经常会碰到这种需求:批量上传文件 element-ui 确实也为我们提供了 ...

  10. 林大妈的JavaScript基础知识(三):JavaScript编程(2)函数

    JavaScript是一门函数式的面向对象编程语言.了解函数将会是了解对象创建和操作.原型及原型方法.模块化编程等的重要基础.函数包含一组语句,它的主要功能是代码复用.隐藏信息和组合调用.我们编程就是 ...