前言:

    本篇博文来记录下对http及https的理解。(会有点 杂,补缺补漏)

    引用:https://blog.csdn.net/u011109589/article/details/80306479

内容:

   首先,我们先 了解下http协议的整个执行过程

    • 建立TCP/IP连接 
      在HTTP工作开始之前,客户端与服务器通过TCP三次握手建立连接。
    • 客户端向服务器发送HTTP请求行 
      建立了TCP连接,客户端向服务器发送HTTP请求行,例如:GET/sample/hello.jsp HTTP/1.1 。
    • 客户端发送请求头和请求体 
      客户端向服务器发送请求头信息、请求体内容,最后客户端会发送一空白行表示客户端请求完毕。
    • 服务器应答响应行 
      服务器会做出应答,表示对客户端请求的应答, 状态行:HTTP/1.1 200 OK 。
    • 服务器向客户端发送响应头信息 
      服务器向客户端发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束。
    • 服务器向客户端发送响应包体 
      接着,服务器以Content-Type响应头信息所描述的格式向客户端发送响应包——所请求的实际数据。
    •  服务器关闭TCP连接 
      如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive ,TCP连接在发送后将仍然保持打开状态,客户端可以继续通过相同的连接发送请求。

  接着讲一下,HTTP是无状态,只负责接受客户端的请求和 服务器的响应传递 ,不会记录 状态,所以就有了session和cookie的出现,用来记录些相关的信息

  好的扯远了,再讲一下HTTP的传输时明文传输,所以就表示所传递的数据被劫持之后就赤果果的展示在坏蛋面前了,这就很糟糕了。所以HTTPS就出现了

  那么什么时HTTPS呢 ?就是http+ssl/tls。(相当的具体吧)

  好的,跟着来讲讲什么时SSL和TLS吧 。其实两个东西是同一个东西(贼顺)

  1. SSL/TLS

    SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均

    支持SSL,其最新的版本是3.0。

    TLS的全称是Transport Layer Security,即安全传输层协议。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操

    作。虽然TLS与SSL3.0在加密算法上不同,但是在我们理解HTTPS的过程中,我们可以把SSL和TLS看做是同一个协议。

  那么HTTPS传输又是一个什么样的过程呢?

  一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步: 

    (1) 客户端向服务器发起HTTPS请求,连接到服务器的443端口。

    (2) 服务器端有一个密钥对,即公钥和私钥,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。 
    (3) 服务器发送了一个SSL证书给客户端,SSL 证书中包含的具体内容有:证书的发布机构CA、证书的有效期、公钥、证书所有者、签名。 
    (4) 客户端收到服务器端的SSL证书之后,验证服务器发送的数字证书的合法性,如果发现发现数字证书有问题,那么HTTPS传输就无法继续。

       如果数字证书合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥;然后用公钥对对称密钥进行加密,变成密文。

       至此,HTTPS中的第一次HTTP请求结束。

    (5) 客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。 
    (6) 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是对称密钥,然后用对称密钥对数据进行对称加密。 
    (7) 服务器将加密后的密文发送给客户端。 
    (8) 客户端收到服务器发送来的密文,用对称密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

    (上面提到了两种加密,对称加密和非对称加密。那就来说一说为什么要这俩结合 ,从字数不难看出非对称加密相对而言更安全,因为私钥不用传递自己保存。那么为什么不直接用非堆成加密呢,因为非对称加密解密的速度慢啊,所以为了兼顾加密的安全性和速度 就将两者进行了结合。)

  (啰嗦下,非对称加密就是拥有一组密钥:公钥和私钥。私钥自己保存,公钥随便给。由公钥加密的东西可以用私钥解码,就这么厉害,对于其中的实现原理,不懂啊!以后学习到了再来补充好了)

    还要说些啥呢?哦,记录下http版本间的改进

    http1.0到http1.1最大的区别就是这个东东:Connection:keep-alive,由短链接到长连接。http1.0采用的是短链接,因为当时网页资源还比较少所以短链接够了,然后互联网的发展,东西就越来越多了啊,什么js包、css包图片啊啥的,如果还是采用短链接,那么就得一次一次的发起http请求,每次建立tcp连接三次握手然后在四次挥手,不得影响效率了,所以就出现了长连接,tcp连接后保持连接,浏览器看可以通过相同的连接发起请求,节约了网络带宽。

    http1.1到http2.0

    HTTP2.0中新的二进制分帧层将HTTP消息分解为互不依赖的帧,然后乱序发送,最后在另一端按照每个包重新组装,就实现了一个连接上有多个请求和响应,从而带来了巨大的性能提升.

https 的理解的更多相关文章

  1. 公钥与私钥对HTTPS的理解(数字证书的需要)

    本文转自某大牛链接 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下window ...

  2. [安全] HTTPS的理解

    一.概述 在下面的章节,我们要搞明白以下几个问题: HTTP和HTTPS的区别,为什么要使用HTTPS HTTPS如何解决加密问题 HTTPS如何避免中间人攻击 CA证书是什么 CA证书是如何申请和颁 ...

  3. HTTP与HTTPS的理解

    最近一直也在面试的过程中,可能由于各个方面的问题,导致没有时间抽出更新博客,今天开始陆续更新!!!以后自己的博客,会向React Native,swift ,以及H5延展,成为一个全栈的技术人员.本篇 ...

  4. HTTPS深入理解

    HTTPS = HTTP + TLS

  5. 报文、http、https的理解

    一.何为报文?     报文是网络中交换与传输的数据单位,即站点一次性要发送的数据块.报文包含了将要发送的完整的数据信息,其长短不一致,长度不限且可变. 二.报文的作用     报文多是多个系统之间需 ...

  6. charles刷分微信跳一跳小程序对https的理解

    以前以为只要安装了https 客户端与服务端的数据会被加密就安全了 事实上 只要任意一款抓包工具 并伪造证书  就可以解密这个被所谓https加密的数据 如  可以下载charles的根证书  作为伪 ...

  7. 简单说一下你对http和https的理解

    http是一种超文本传输协议,传输的数据都是未加密的,也就是显示在明面上的,是现在互联网上应用最为广泛的一种网络协议,相对来说不太安全,但是所需成本很小.http一般的端口号为80. https则是具 ...

  8. HTTP 与HTTPS 简单理解

      HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因 ...

  9. 如果这样来理解HTTPS,一篇就够了!

    1.前言 可能有初学者会问,即时通讯应用的通信安全,不就是对Socket长连接进行SSL/TLS加密这些知识吗,干吗要理解HTTPS协议呢. 这其实是个误解:当今主流的移动端IM数据通信,总结下来无外 ...

随机推荐

  1. vba 语法

    VBA语言基础 第一节 标识符 一.定义 标识符是一种标识变量.常量.过程.函数.类等语言构成单位的符号,利用它可以完成对变量.常量.过程.函数.类等的引用. 二.命名规则 1) 字母打头,由字母.数 ...

  2. mfc 引用

    一.引用的概念 引用(reference)是另一标识符的别名,可以说是C++的一种新的变量类型,是对C的重要扩充.当建立引用时,程序用另一个变量或对象(目标)的名字初始化它(即它代表了标识符的左值), ...

  3. 一维码Codabar简介及其解码实现(zxing-cpp)

    一维码Codabar:由4条黑色线条,3条白色线条,合计7条线条所组成,每一个字元与字元之间有一间隙Gap做区隔. 条形码Codabar包含21个字元: (1).10个数字0~9; (2)." ...

  4. 19-[模块]-json/pickle、shelve

    1.序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes (1)把字典保存到文件 data = { 'roles': [ ...

  5. 2653: middle

    2653: middle 链接 分析: 二分答案+主席树. 对于中位数的经典做法,就是二分一个数,将小于的变成-1,大于等于的变成+1,那么如果sum>=0(因为+1包括等于),L=mid+1, ...

  6. C#,清晨随手写

    关于昨晚“猜拳”的博客   大家一定要记得,C#的书写规范是很严格的   很严格很严格很严格  简单的说  下面这样就没办法取值 但是这样就可以取值 插眼,开撸

  7. [Selenium]如何通过Selenium实现Ctrl+click,即按住Ctrl的同时进行单击操作

    [以下是不负责任的转载……] 在自动化测试的过程中,经常会出现这样的场景: 按住Ctrl的同时,进行单击操作,已达到多选的目的 Actions a = new Actions(driver); a.k ...

  8. [PLC]ST语言五:STL/RET/CMP/ZCP

    一:STL/RET/CMP/ZCP 说明:简单的顺控指令不做其他说明. 控制要求:无 编程梯形图: 结构化编程ST语言: (*步进指令STL(EN,s);*) SET(M8002,S3); STL(T ...

  9. php_package v2.7发布了 宋正河作品

    php_package 是一个面向过程的底层开发框架 http://download.csdn.net/download/songzhengdong82/4974123 欢迎大家下载

  10. iOS分类Category探索

    什么是Category? Category是Objective-C 2.0之后添加的语言特性,Category的主要作用是为已经存在的类添加方法,一般称为分类,文件名格式是"NSObject ...