转自 https://segmentfault.com/a/1190000015316332

一、HTTP/1.x

Http1.x

  • 缺陷:线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数目的请求会被阻塞

http1.0

  • 缺陷:浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接(TCP连接的新建成本很高,因为需要客户端和服务器三次握手),服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求;
  • 解决方案

    • 添加头信息——非标准的Connection字段Connection: keep-alive

http1.1:

  • 改进点:
  1. 持久连接

    • 引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive(对于同一个域名,大多数浏览器允许同时建立6个持久连接)
  2. 管道机制

    • 即在同一个TCP连接里面,客户端可以同时发送多个请求。
  3. 分块传输编码

    • 即服务端没产生一块数据,就发送一块,采用”流模式”而取代”缓存模式”。
  4. 新增请求方式

    • PUT:请求服务器存储一个资源;
    • DELETE:请求服务器删除标识的资源;
    • OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求;
    • TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断;
    • CONNECT:保留将来使用
  • 缺点:

    • 虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着。这将导致“队头堵塞”
    • 避免方式:一是减少请求数,二是同时多开持久连接

二、HTTP/2.0

  • 特点:

    1. 采用二进制格式而非文本格式;
    2. 完全多路复用,而非有序并阻塞的、只需一个连接即可实现并行;
    3. 使用报头压缩,降低开销
    4. 服务器推送

1. 二进制协议

  • HTTP/1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为”帧”:头信息帧和数据帧。
  • 二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。

2. 完全多路复用

  • HTTP/2 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”。

3. 报头压缩

  • HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如Cookie,一样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度。
  • 对于相同的头部,不必再通过请求发送,只需发送一次;
  • HTTP/2 对这一点做了优化,引入了头信息压缩机制;
  • 一方面,头信息使用gzip或compress压缩后再发送;
  • 另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。

4. 服务器推送

  • HTTP/2 允许服务器未经请求,主动向客户端发送资源;
  • 通过推送那些服务器任务客户端将会需要的内容到客户端的缓存中,避免往返的延迟

三、HTTPS

  • HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS.

1、HTTPS主要作用

- (1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;
- (2)对网站服务器进行真实身份认证。

2、HTTPS和HTTP的区别

- 1、HTTPS是加密传输协议,HTTP是名文传输协议;
- 2、HTTPS需要用到SSL证书,而HTTP不用;
- 3、HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,
- 4、 HTTPS标准端口443,HTTP标准端口80;
- 5、 HTTPS基于传输层,HTTP基于应用层;

3、HTTPS和HTTP的工作过程区别

  • HTTP 包含动作:

    1. 浏览器打开一个 TCP 连接
    2. 浏览器发送 HTTP 请求到服务器端
    3. 服务器发送 HTTP 回应信息到浏览器
    4. TCP 连接关闭
  • SSL 包含动作:

    1. 验证服务器端
    2. 客户端和服务器端选择加密算法和密码,确保双方都支持
    3. 验证客户端(可选)
    4. 使用公钥加密技术来生成共享加密数据
    5. 创建一个加密的 SSL 连接
    6. 基于该 SSL 连接传递 HTTP 请求

3、HTTPS加密方式

  • 对称加密:加密和解密都是使用的同一个密钥;
  • 非对称加密:

    • 加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥;
    • 公钥和算法都是公开的,私钥是保密的。
    • 非对称加密过程:
    1. 服务端生成配对的公钥和私钥
    2. 私钥保存在服务端,公钥发送给客户端
    3. 客户端使用公钥加密明文传输给服务端
    4. 服务端使用私钥解密密文得到明文
  • 数字签名:签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过。

深入理解http1.x、http 2和https的更多相关文章

  1. golang语言并发与并行——goroutine和channel的详细理解(一) 转发自https://blog.csdn.net/skh2015java/article/details/60330785

    如果不是我对真正并行的线程的追求,就不会认识到Go有多么的迷人. Go语言从语言层面上就支持了并发,这与其他语言大不一样,不像以前我们要用Thread库 来新建线程,还要用线程安全的队列库来共享数据. ...

  2. 通俗理解数字签名,数字证书和https

    最近在开发关于PDF合同文档电子签章的功能,大概意思就是在一份PDF合同上签名,盖章,使其具有法律效应.签章有法律效应必须满足两个条件: 能够证明签名,盖章者是谁,无法抵赖 PDF合同在签章后不能被更 ...

  3. 深入理解Https如何保证通信安全

    作为一名ABC搬运工,我相信很多人都知道Https,也都知道它是用来保证通信安全的,但是如果你没有深入了解过Https,可能并不知道它是如何保证通信安全的.我也是借着这次机会,和大家分享下我深入了解的 ...

  4. HTTPS 详解一:附带最精美详尽的 HTTPS 原理图

    HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 前言 作为一个有追求的程序员,了解行业发展趋势和扩充自己的计算机知识储备都是很有 ...

  5. 深入理解PHP内核(二)概览-PHP生命周期与Zend引擎

    本文参考自<深入理解PHP内核>,地址:https://github.com/reeze/tipi 本文链接:http://www.orlion.ml/232/ 1.SAPI接口 SAPI ...

  6. 深入揭秘HTTPS安全问题&连接建立全过程

    作者:[已重置]链接:https://zhuanlan.zhihu.com/p/22142170来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作为开发者必备的网络安全 ...

  7. 1、大部分社交平台接口不支持https协议。

    参考文献来自:http://wiki.mob.com/ios9-%E5%AF%B9sharesdk%E7%9A%84%E5%BD%B1%E5%93%8D%EF%BC%88%E9%80%82%E9%85 ...

  8. 深入理解Java虚拟机--下

    深入理解Java虚拟机--下 参考:https://www.zybuluo.com/jewes/note/57352 第10章 早期(编译期)优化 10.1 概述 Java语言的"编译期&q ...

  9. HTTP2和HTTPS来不来了解一下?

    一.前言 只有光头才能变强 HTTP博文回顾: PC端:HTTP就是这么简单 PC端:HTTP面试题都在这里 微信公众号端:HTTP就是这么简单 微信公众号端:HTTP面试题都在这里 本文力求简单讲清 ...

随机推荐

  1. Python3 json &pickle 数据序列化

    json 所有语言通用的信息交换格式 json.dumps()将list列表.dict字典.元组.函数等对象转换为可以存储的字符格式存入文件 json.dump(数据对象名,已以写方式打开的对象) 直 ...

  2. MySQL增删改查的常用语句汇总

    MySQL增删改查的常用语句汇总 以下是总结的mysql的常用语句,欢迎指正和补充~ 一.创建库,删除库,使用库 1.创建数据库:create database 库名; 2.删除数据库:drop da ...

  3. idea tomcat 热部署

    一有改动就在页面显示改动的东西就称为idea tomcat 热部署,开发的时候热部署一定要是demo:war exploded状态,若是在demo:war状态,怎么配置都不可能热部署,然后还要做如下的 ...

  4. 网络编程之UDP(1)高效低销

    读书笔记 from here 高效 Linux系统有用户空间(用户态)和内核空间(内核态)之分,内核与用户空间发生切换比较耗时,内核需要保存上下文.执行用户态数据.再恢复到保存的上下文. 实际中,应该 ...

  5. 拥有大量相同结构Activity的项目精简经验—— ReUsableActivity

    简介 一个可以重复利用的Activity.通过设置不同的Fragment加入到一个可复用的Activity中实现代码的精简. 这个仓库可以用来精简项目中拥有大量重复的AppBar布局的Android ...

  6. 【LeetCode】694. Number of Distinct Islands 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...

  7. 【LeetCode】156. Binary Tree Upside Down 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 迭代 日期 题目地址:https://leet ...

  8. 【LeetCode】874. Walking Robot Simulation 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 模拟 日期 题目地址:https://leetcod ...

  9. 【LeetCode】797. All Paths From Source to Target 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 回溯法 日期 题目地址:https://leetco ...

  10. 【jvm】08-垃圾回收器那么多傻傻分不清?

    [jvm]08-垃圾回收器那么多傻傻分不清? 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺手点 ...