HTTP、HTTPS、SPDY、HTTP2.0、HTTP3.0

  • HTTP、HTTPS、SPDY、HTTP2.0 总览
  • HTTP
    • 工作原理
    • 优缺点
  • HTTPS
    • HTTP 与 HTTPS 的区别
    • HTTPS 的工作原理、安全机制
    • HTTPS优缺点
  • HTTP2.0
    • HTTP2.0 优缺点
  • SPDY
    • SPDY优缺点
  • HTTP3.0
    • QUIC协议

HTTP、HTTPS、SPDY、HTTP2.0 总览

http,https,spdy,http2等协议的主要区别详解
HTTP 0.9:基于GET请求的文本传输协议
HTTPS:安全的HTTP传输协议(SSL/TLS+HTTP)
HTTP 1.0:增加HTTP头、扩展PUT、POST等方法
HTTP 1.1:长连接流水线支持,最广泛使用的HTTP传输协议
SPDY:针对HTTP的增强,工作在SSL层之上、HTTP层之下
HTTP 2.0:安全高效的下一代HTTP传输协议,主要基于SPDY协议,采用二进制格式而非文本格式,完全多路复用的,而非有序并阻塞的。
HTTP 3.0: (2018) 基于UDP的安全可靠的HTTP2.0协议,核心是QUIC协议。实现了多路复用、0-RTT、TLS加密、流量控制、丢包重传、向前纠错机制。

HTTP

HTTP的概念上篇博文已经介绍过了其具体格式:
HTTP: 超文本传输协议(英文:HyperText Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议。是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)的协议。
HTTP是万维网的数据通信的基础,它允许将HTML(超文本标记语言)文档从Web服务器传送到Web浏览器。

工作原理

HTTP 使用 TCP 三次握手建立连接
在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接

  • 第一次握手:客户端尝试连接服务器,向服务器发送 syn 包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入 SYN_SEND 状态等待服务器确认
  • 第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个 SYN包(syn=k),即 SYN+ACK包,此时服务器进入 SYN_RECV 状态
  • 第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

优缺点

HTTP主流的协议版本还是HTTP/1.1版本,以HTTP/1.1 代表HTTP有以下优缺点:
HTTP的优点:

  • 简单,灵活,易于扩展:因为无太多限制,因为简单可以叫用户自己扩展。

  • 应用广泛,环境成熟:因为过于简单,普及,因此应用很广泛。因为本身不属于一种语言,因此,就无平台,语言界限,因此跨平台性很强。

  • 无状态,因为没有任何记录。可以减轻服务器的负担,能够更多的cpu和内存用来对外提供服务。因为无状态,对服务器无要求,因此可以组成集群。

HTTP的优点:

  • 明文传输 – 带来不安全性,,内容可能会被窃听、篡改、通信身份可能被伪装。
    HTTP/1.1 在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,这在一定程度上无法保证数据的安全性。

  • 高延迟 – 带来页面加载速度的降低
    虽然近几年来网络带宽增长非常快,然而我们却并没有看到网络延迟有对应程度的降低。网络延迟问题主要由于队头阻塞 (Head-Of-Line Blocking) 产生,导致带宽无法被充分利用。

  • 无状态特性 – 带来巨大的 HTTP 头部
    无状态(协议对于交互性场景没有记忆能力)什么是HTTP无状态?特性造成HTTP头部冗余
    由于报文 Header 一般会携带 “User Agent” “Cookie”“Accept”“Server” 等许多固定的头字段(如下图),多达几百字节甚至上千字节,但 Body 却经常只有几十字节(比如 GET 请求、 204/301/304 响应),成了不折不扣的“大头儿子”。Header 里携带的内容过大,在一定程度上增加了传输成本。更要命的是,成千上万的请求响应报文里有很多字段值都是重复的,非常浪费。

HTTPS

**HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)**是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

==》HTTPS即以安全为目标的 HTTP 通道,是 HTTP 的安全版。其安全基础是 SSL。
而SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL 协议可分为两层:SSL 记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

由于HTTP报文的不安全性,网景在1994年就创建了HTTPS,并用在浏览器中。最初HTTPS是和SSL一起使用,然后演化为TLS。SSL/TLS在OSI模型中都是表示层的协议。SSL使 用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。

其他:

  • SSL(Secure Sockets Layer),简称安全套接入层,最初由上世纪90年代由网景公司设计。开启 SSL 会增加内存、CPU、网络带宽的开销,后二者跟你使用的 cipher suite 密切相关,其中参数很多,很难一概而论。开启 SSL 的前提是你的 cert 和 key 必须放在 TCP endpoint,你是否信得过那台设备。

  • TLS(Transport Layer Security),简称安全传输层协议,该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面,与具体的应用无关,所以,一般把TLS协议归为传输层安全协议。

HTTP 与 HTTPS 的区别

HTTP 和 HTTPS 的区别(面试常考题)
HTTP 与 HTTPS 的区别——菜鸟

  • HTTP 明文传输,数据都是未加密的,安全性较差HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
  • 使用 HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前网易官网是http,而网易邮箱是 https 。)证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
  • HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
  • HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源
  • HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

HTTPS 的工作原理、安全机制

https安全机制简析(详细加密图解)
https安全机制简析

HTTPS采用混合加密机制

HTTPS采用共享密钥(非对称密钥)加密和公开密钥(对称密钥)加密两者并用的混合加密机制。若密钥能够采用实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。所以使用公开密钥加密方式来交换密钥,之后建立通信交换报文阶段使用共享密钥加密方式。

为了确保公开密钥本身的完整性,需要第三方数字证书认证机构(CA)颁发的证书(SSL)

数字证书的认证过程如下:

   1.服务器向机构提交公钥申请,机构在判明申请者身份后,对公钥进行数字签名(即用自己的私钥部署至公钥)之后颁发公钥证书。2.数字证书认证机构的公开密钥已事先植入到浏览器,客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥,向数字证书认证机构验证公钥证书的数字签名,以确认服务器的公开密钥的正式性。3.使用服务器的公开密钥对报文加密后发送。4.服务器用私钥对报文解密。


在第 ② 步时服务器发送了一个SSL证书给客户端,SSL 证书中包含的具体内容有证书的颁发机构、有效期、公钥、证书持有者、签名,通过第三方的校验保证了身份的合法,解决了公钥获取的安全性。

(数字签名、摘要签名、摘要信息意义一样;摘要算法、哈希算法意义一样)

常用加密算法:

对称加密算法: AES, 3DES

非对称加密算法:RSA, DSA/DSS

HASH算法:MD5, SHA1, SHA256

我们都知道 HTTPS 能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用 HTTPS 协议。


1、客户端发起 HTTPS 请求
用户在浏览器里输入一个 https 网址,然后连接到 server 的 443 端口。

2、服务端的配置
采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl 就是个不错的选择,有 1 年的免费服务)。

这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

3、传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

4、客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。

如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

5、传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

6、服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

7、传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

8、客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。

HTTPS优缺点

1. Https的优点

尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:

(1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

(2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性

(3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本

(4)实用优势:谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。

2. Https的缺点

虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;

(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

(3)SSL证书需要,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗

(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

HTTP、HTTPS、SPDY、HTTP2.0、HTTP3.0 —— 通信协议学习笔记(二)相关推荐

  1. 6 个月从 0 学会英语 - 视频学习笔记

    6 个月从 0 学会英语 - 视频学习笔记 https://www.bilibili.com/video/av11910967 Chris Lonsdale - 龙飞虎 01 建立准确的习惯,投资足够 ...

  2. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0. zfill()方法语法: ...

  3. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  4. TensorFlow2.0 Guide官方教程 学习笔记17 -‘Using the SavedModel format‘

    本笔记参照TensorFlow官方教程,主要是对'Save a model-Training checkpoints'教程内容翻译和内容结构编排,原文链接:Using the SavedModel f ...

  5. BC1.2协议以及QC2.0/3.0快充协议学习笔记

    BC1.2快充协议介绍 BC1.2定义 BC1.2 (Battery Charging v1.2)是USB-IF下属的BC(Battery Charging)小组制定的协议,主要用于规范电池充电的需求 ...

  6. 鸟叔的linux私房菜:第0章 计算机概论学习笔记(Learning Notes for Basic Computer Theory)

    本博客是针对<鸟叔的Linux私房菜 基础学习篇 第四版>的第0章 计算机概论的学习笔记. 1 电脑辅助人脑的好工具 11 计算机硬件的五大单元 12 一切设计的起点CPU的架构 其它单元 ...

  7. Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码

    文章目录 1.argmax和max函数区别 2.axis=0/axis=1/axis=-1的区别 3.具体代码分析 ---3.1一维数组 ---3.2二维数组 ---3.3三维数组 1.argmax和 ...

  8. PBOC 3.0非接触式学习笔记(一)

    因为毕业设计的机缘巧合,接触了智能卡的开发.看了近一个月的PBOC 3.0金融规范,决定从实践中快速了解各种命令的发送以及响应.网上前辈的的各种博客文章,对于我这个智能卡开发几乎为零的小白来说无疑是最 ...

  9. TensorFlow2.0 Guide官方教程 学习笔记10- Eager execution

    本笔记参照TensorFlow官方教程,主要是对'Eager execution'教程内容翻译和内容结构编排,原文链接:Eager execution 目录 一.创建环境和基本使用 二.动态控制流 三 ...

  10. Vue2.0学习笔记二 基础语法

    1. Mustache语法 Mustache语法也叫插值表达式,Mustache语法式通过{{}}渲染到页面,并且数据是响应式的. 数据的响应式:数据的变化导致页面的内容随之变化 效果图: 2. 指令 ...

最新文章

  1. laravel-mix 使用
  2. repo入门和基本用法
  3. 阿里达摩院员工业余打造“论文知识图谱”工具:极速搜索,完全可视化
  4. python能做什么项目好-python能做什么项目
  5. 设置elf文件链接库的路径
  6. 透过 3.0 Preview 看 Dubbo 的云原生变革
  7. hive防止数据误删
  8. JSP——JavaBean应用
  9. IDEA Translation插件安装及设置鼠标悬浮提示的自动翻译
  10. 应用迁移方案_Kubernetes如何成为迁移旧版应用程序的解决方案
  11. java Flink使用addSink方法保存流到mysql数据库中
  12. MCU破解技术分析(一)
  13. KB-QA:如何对问题进行信息抽取?
  14. 挖坑:handoop2.6 开启kerberos(全流程学习记录)
  15. python制作的项目进度管理_项目管理必备——使用燃尽图监控项目整体进度
  16. Wallys/QCA9531,MIMO,2.4G,30dBm
  17. java jsessionid 会话_jsessionid 对JAVA WEB jsessionid的剖析
  18. 没有用递归,写了一个文本转成树的小程序,代码凑和看吧
  19. Logisim海明编码解码实验
  20. 怎样在线制作视频二维码?多种类型二维码一键生成技巧

热门文章

  1. mysql嵌套查询语句
  2. Flash遮罩层初识
  3. python数据科学导论_R与Python手牵手:数据科学导论系列(包的载入)
  4. GIS应用技巧之定义图框样式
  5. CMD下复制文件和文件夹
  6. arcgis pro利用python进行空间插值
  7. python因子分析 ic值 函数_spss问卷调查因子分析定义变量及内容输入
  8. 控制装置与仪表随堂练习答案及知识点总结01
  9. JavaSE的思维导图
  10. JMeter基础 — JMeter中BeanShell断言详解