重要知识点
Cookie、Session、Token
1)Cookie
Cookie | 说明 |
---|---|
定义 | 一种 客户端机制 |
原理 | 服务器在 HTTP 响应头,加上一行特殊指示以提示 内容:【key、value、过期时间、路径&域】 路径和域,构成 cookie的作用范围 不设置过期时间,表示该Cookie生命周期 = 在本次会话期间 |
作用 | 保存一些数据,客户端可序列化到本地 下次请求时反序列化放到Cookie中 |
限制 | 单个Cookie 保存的数据,不超过4K |
安全性 | Cookie 不安全,可分析存放在本地的Cookie & 进行Cookie欺骗 |
应用场景 | 存放安全性要求低、数据量小的数据 |
2)Session
Session | 说明 |
---|---|
定义 | 一种 服务端的机制 |
特点 | 使用 哈希表(散列表)来保存信息 |
创建过程 | 1、服务端检查客户端的请求头是否已包含一个 session_id 2、已包含,则根据该 session_id 取出session 3、不包含,则为此客户端创建一个session,生成一个 session_id |
session_id | 是一个 不会重复,不易被仿照的字符串 新创建的session 对应的 session_id 会在本次响应中返回给客户端保存 保存方式可采用cookie session_id 保存在cookie中的 key 一般类似于 SESSIONID 客户端每次请求都把cookie带上,也就带上了 session_id,发送给服务器 |
场景 | 存放重要信息,安全性高,存储数据量多 |
缺点 | 比较 占用服务器的资源 |
基于Cookie 的身份验证流程
8、基于Token 的身份验证流程
9、Token 相比 cookie 的优点
Token优点 |
---|
服务器不需要记录 token |
服务器工作是, 在登录请求上,签署token 在后续请求中,验证传入的 token |
防跨站请求伪造,攻击者无法通过请求链接url获取验证信息 |
cookie 绑定到单个域,无法被其他域读取 token 可以向多个服务器获取授权 |
Http优化点
优化点 | 说明 |
---|---|
DNS查询优化 | 利用 DNS缓存结果 来达到减少域名解析时间 |
建立连接池 | 连接复用,避免每次请求都经历 三次握手、慢启动 |
Http1.0 对比 Http1.1
版本 | 差异 |
---|---|
HTTP1.0 | 1、非持续连接 每次请求都要创建连接、慢启动、分配缓存和变量 2、缓存处理 使用header 里的 If-Modified-Since,Expires 做缓存判断标准 3、带宽使用问题 存在一些 浪费带宽 的现象 客户端 只需要某个对象的一部分,服务器却将整个对象传过来,且不支持断点续传功能 4、Host头处理 HTTP1.0 认为每台服务器都绑定一个唯一的IP地址 请求消息中的 URL 没有传递主机名(hostname) 物理服务器上可以存在 多个虚拟主机,共享一个IP地址 |
HTTP1.1 | 1、长连接 使用 持续连接,服务器发送响应后,在一段时间内保持这条连接 减少了建立和关闭连接的消耗、延迟 HTTP1.1 中默认开启 Connect: keep-alive 持续连接的两种工作方式: 1)非流水线方式 客户端 收到前一个响应后、才能发出下一个请求 2)流水线方式 客户端 收到 HTTP响应报文之前,能够接着发送新的请求报文 服务器 可连续发回响应报文 2、缓存处理 更多缓存控制策略:Entity tag,If-Unmodified-Since,If-Match,If-None-Match 3、带宽优化 请求头引入了 range头域,允许只请求资源的某个部分,返回码是206(Partial Content) 4、错误通知的管理 新增了24个错误状态码,如: 409(Conflict),表示 请求的资源与资源的当前状态发送冲突 410(Gone),表示服务器上的某个资源被永久性的删除 5、Host头处理 请求消息、响应消息,都支持Host头域 请求消息中如果 没有Host头域,会报错误(400 Bad Request) |
Http2.0 对比 Http1.x 的新特性
新特性 | 说明 |
---|---|
新的二进制格式 | HTTP1.x 的解析是 基于文本 HTTP2.0 的解析采用 二进制格式 |
多路复用 | 一个 request 对应一个id,一个连接上可以有多个 request 每个连接的 request 可以随机的混杂在一起 接收方 根据 request 的 id,将 request 归属到各自不同的请求里面 TCP 拥塞控制的慢启动策略,TCP连接的 起初会限制连接传输的最大速度 如果没有拥塞,会逐渐提高传输速度 导致具有 突发性、短时性 的 Http连接 变得低效(传输速度起来之前,请求已经结束) 多路复用,所有数据共用同一个连接,更有效的使用TCP连接,重复利用带宽 SPDY位于HTTP之下,SSL和TCP之上: HTTP > SPDY > SSL > TCP |
header压缩 | HTTP1.x header 带有大量信息,每次都要重复发送 HTTP2.0 使用 encoder 压缩,减少传输的 header大小 通讯双方各自 cache 一份 header fields表,差量更新 HTTP头部 避免 重复 header的传输,减小了需要传输的大小 |
服务端推送 | HTTP2.0 也具有server push 功能 比如,客户端请求一个 index.html 静态页面 服务端推送,把该静态页面所需要的资源(比如,main.js文件),伴随着index.html一起发送到客户端 省去客户端请求 main.js的步骤 |
HTTPS 与 HTTP 的区别
协议 | 区别 |
---|---|
HTTP | HTTP 运行在 TCP 上,传输的内容都是明文 HTTP 使用 80 端口 |
HTTPS | HTTPS 需要到CA申请证书 HTTPS 运行在 SSL/TLS上,SSL/TLS运行在TCP之上,传输的内容都经过加密 HTTPS 使用 443 端口 HTTPS 可以 防止运营商劫持数据 |
get请求与post请求的区别
方法 | 特征 |
---|---|
GET | 1、参数长度受限制 GET 发送的 数据存放在URL中,直接附加在URL后 用1个问号("?")代表URL的结尾 &请求参数的开始 URL 的长度是受限制的,最大长度 2048 个字符 2、参数的数据类型 只允许传 ASCII 字符 3、安全性低 数据直接添加到URL后,对外可见 4、应用场景 请求 小量、数据不敏感 数据 |
POST | 1、参数长度不受限制 2、参数数据类型不受限制 3、安全性高 请求数据一般放在请求体中 4、应用场景 大量、数据敏感,比如向服务器提交数据 |
HTTPS 加密过程
说明 | 详情 |
---|---|
HTTPS 涉及三个密钥 | 服务器端的 公钥、私钥,用来进行 非对称加密 客户端生成的 随机密钥,用来进行 对称加密 |
第1步 | 客户端向服务器发起HTTPS请求,连接到服务器的 443端口 |
第2步 | 服务器 将 公钥 发送给客户端 |
第3步 | 客户端 对公钥进行检查,验证其合法性 如果校验失败,则请求失败 |
第4步 | 公钥验证通过,客户端会生成一个随机值,作为对称加密的密钥 然后用服务器的公钥对客户端密钥进行非对称加密 |
第5步 | 客户端发起 第二次请求,将加密之后的客户端密钥发送给服务器 |
第6步 | 服务器 收到客户端发来的密文后,用私钥对客户端密文解密,解密之后的明文就是客户端密钥 然后 用客户端密钥对数据进行对称加密,这样数据就变成了密文 |
第7步 | 服务器,将加密后的密文发送给客户端 |
第8步 | 客户端收到服务器发送的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据 这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成 |
万维网 WWW(World Wide Web) 简称Web
万维网用链接的方法,从因特网上的一个站点访问另一个站点,从而主动按需获取信息。
万维网以 客户-服务器 方式工作。
1、URL格式
<协议>://<主机>:<端口>/<路径>
一、Http(HyberText Transfer Protocol超文本传输协议)基本概念及报文结构
1、基本概念
HTTP 超文本传输协议,面向文本
HTTP 是应用层协议,默认端口号是80,通常可以省略。
HTTP 无状态 数据传输过程中,不保存任何历史状态信息
该特性简化了服务器的设计,使服务器更容易支持大量并发的Http请求。
HTTP 的传输层使用 TCP协议
2、报文结构-请求报文
报文结构 | 内容 |
---|---|
请求行 | 方法 URL 版本 比如:GET /chn/yxsz/index.html HTTP/1.1 |
header | key1: value1 key2: value2 key3: value3 比如: Host: www.tsinghua.edu.cn User-Agent: Mozilla/5.0 |
header 与 body 之间 空一行 | |
body | 请求体 比如:key1=value1&key2=value2 |
|
请求行 | [方法] 空格 [URL] 空格 [版本] [回车换行]
|
Header | [header字段名][:] 空格 [header字段值][回车换行]
| ...
| [header字段名][:] 空格 [header字段值][回车换行]
| [回车换行]
Body | [请求体]
|
1)请求行
方法,URL,版本 三个字段之间以 空格分隔开 。结束时回车换行
URL 是指端口之后的部分
若 接口 = http://www.baidu.com/ ,则 URL = /
若 接口 = http://www.weibo.com/288/home 则 URL = /288/home
协议版本:HTTP/1.0,HTTP/1.1, HTTP/2.0
2)Header请求头
key:value的方式,用来传一些信息。可以有多行,每行结束时回车换行
整个Header结束时,还有一空行,将Header 和后面的Body分开。
作用:声明 客户端、服务器 / 报文的部分信息
使用方式:key : value 的方式
请求和响应报文通用请求头:
请求头 | 说明 |
---|---|
Content-Type | 请求体 / 响应体的类型,如:text/plain、application/json |
Accept | 说明接收的类型,可多个值,用,(半角逗号)分开 |
Content-Length | 请求体 / 响应体的长度,单位 字节 |
Content-Encoding | 请求体 / 响应体的编码格式,如:gzip、deflate |
Accept-Encoding | 告知对方,我方接受的Content-Encoding |
ETag | 给当前资源的标识,和 Last-Modified、If-None-Match、If-Modified-Since 配合,用于缓存控制 |
Cache-Control | 取值一般为 no-cache / max-age=XX,XX为整数,表示缓存有效期(秒) |
常见请求头
请求头 | 说明 |
---|---|
Authorization | 用于设置身份认证信息 |
User-Agent | 用户标识,如:OS和浏览器的类型和版本 |
If-Modified-Since | 值为上一次服务器返回的 Last-Modified 的值 用于确认某个资源是否被更改过 没有更改过(304),就从缓存读取 |
If-None-Match | 值为上以此服务器返回的 ETag 值,一般会和 If-Modified-Since 一起出现。 |
Cookie | 已有的Cookie |
Referer | 表示请求引用自哪个地址,比如你从 页面A 跳转到 页面B 时,值为 页面A 的地址 |
Host | 请求的主机、端口号 |
3)请求体
作用:存放 需要发送给服务器的数据,GET请求没有请求体
使用方式:
数据交换:请求体可以任意类型,但服务器需额外解析。比如:{“name”:“html”, “year”:“5”}
键值对:键值之间用"=“连接,每个键值对间用”&"连接。比如:key1=value&key2=value2
分部分形式:请求体被分为多个部分,每段以 -{boundary} 开头,
描述头后空一行 接 内容,每段以 -{boundary}- 结束
比如:
-{boundary} //开头
Content-Disposition: form-data;name="name" //描述头
//空格
this is first request part! //内容
-{boundary} //开头
Content-Disposition: form-data;name="name" //描述头
//空格
this is second request part! //内容
-{boundary}- //结束
4)请求报文实例
请求行:GET /chn/yxsz/index.html HTTP/1.1
请求头:Host: www.tsinghua.edu.cn
User-Agent: Mozilla/5.0
空行:
请求体:key1=value1&key2=value2
3、报文结构-响应报文
报文结构 | 说明 |
---|---|
状态行 | 版本 状态码 状态码解释 比如: HTTP/1.1 202 Accepted |
Header | key1:value1 key2:value2 |
空行 | |
Body | 响应体 |
1)状态行
版本,状态码,解释状态码的短语 三个字段之间用空格分隔开。结束时回车换行
实例:
HTTP/1.1 202 Accepted
HTTP/1.1 404 Not Found
2)Header 响应头
key:value的方式,用来传一些信息。可以有多行,每行结束时回车换行
整个Header结束时,还有一空行,将Header 和后面的Body分开
常见响应头
响应头 | 说明 |
---|---|
Date | 服务器的日期 |
Last-Modified | 该资源最后被修改时间 |
Transfer-Encoding | 取值一般为chunked,出现在Content-Length不能确定的情况下, 表示 服务器不指定响应体的数据大小,一般同时还会出现 Content-Encoding 响应头 |
Set-Cookie | 设置Cookie |
Location | 重定向到另一个URL,如:在浏览器输入 baidu.com 回车,会自动跳到 https://www.baidu.com 就是通过这个响应头控制的 |
Server | 后台服务器 |
3)响应体
作用:存放 返回给客户端的数据信息
使用方式与请求体一致。
使用方式:
数据交换:请求体可以任意类型,但服务器需额外解析。比如:{“name”:“html”, “year”:“5”}
键值对:键值之间用"=“连接,每个键值对间用”&"连接。比如:key1=value&key2=value2
分部分形式:请求体被分为多个部分,每段以 -{boundary} 开头,
描述头后空一行 接 内容,每段以 -{boundary}- 结束
比如:
-{boundary} //开头
Content-Disposition: form-data;name="name" //描述头
//空格
this is first request part! //内容
-{boundary} //开头
Content-Disposition: form-data;name="name" //描述头
//空格
this is second request part! //内容
-{boundary}- //结束
4、请求方法
方法 | 用途 |
---|---|
OPTION | 请求一些选项的信息 |
GET | 请求读取由URL所标志的信息 |
POST | 给服务器添加信息 |
HEAD | 请求读取由URL所标志的信息的首部 |
PUT | 在指明的URL下 存储一个文档 |
DELETE | 删除 指明 URL 所标志的 资源 |
TRACE | 用来进行 环回测试 的请求报文 |
CONNECT | 用于 代理服务器 |
5、常见状态码
状态码 | 含义 |
---|---|
1xx | 表示,通知信息,如 请求收到了或正在进行处理 |
2xx | 表示,成功 |
3xx | 表示,重定向 |
4xx | 表示,客户端的差错 |
5xx | 表示,服务器的差错 |
常见 状态行:
HTTP/1.1 202 Accepted {接受}
HTTP/1.1 400 Bad Request {错误的请求}
HTTP/1.1 404 Not Found {找不到}
二、Http常见错误码
1、常见状态码
1xx 表示,通知信息,如请求收到了或正在进行处理。
2xx 表示,成功
3xx 表示,重定向
4xx 表示,客户的差错
5xx 表示,服务器的差错。
状态码实例:
200: 请求成功,请求内容于该响应一起返回
201: 请求成功,资源被正确的创建
202: 请求已被接受,但还没处理 (客户端轮询等机制继续请求)
203: 请求的代理服务器,命中了缓存,告诉我们这部分信息不一定是最新的。
300: 请求成功,但结果有多种选择
301: 请求的资源已被永久转移
302: 请求的资源已被临时转移
303: 使用GET 来访问新的地址来获取资源
304: 未按预期修改(请求的资源没有被修改)
308: 使用原有的地址请求方式,通过新地址获取资源
400: 请求参数有误,当前请求无法被服务器理解
401: 请求需要验证用户,比如,没有带上token
403: 不允许访问该地址,没有访问权限
404: Not Found
406: 请求的资源并不符合要求
408: 请求超时
413: 请求体过大。
415: 类型不正确。
416: 请求的区间无效
500: 服务器内部错误
501: 请求还没有被实现
502: Bad Gateway网关出错
503: 服务暂时不可用。服务器正好在更新代码重启。
505: 请求的 HTTP 版本不支持。
三、Http1.0与Http1.1与Http2.0的区别
HTTP 的基本优化
影响HTTP网络请求的两个因素:带宽、延迟。
1、延迟
1)浏览器阻塞
浏览器对同一个域名,同时只能维持一定数量的连接,
超过连接数限制,后续请求会被阻塞。
2)DNS查询
将域名解析为IP,通常可以利用 DNS缓存结果来达到减少域名解析时间的目的。
3)建立连接
HTTP 是基于 TCP 协议的,最快也要在第三次握手时才能捎带 HTTP 请求报文。
连接无法复用,会导致每次请求都经历三次握手和慢启动。
2、Http1.0 和 Http1.1的区别
1)缓存处理
Http1.0 使用header 里的 If-Modified-Since,Expires 做缓存判断标准
Http1.1 引入更多缓存控制策略,如,Entity tag,If-Unmodified-Since,If-Match,If-None-Match
更多可供选择的缓存头来控制缓存策略。
2)带宽优化和网络连接的使用
Http1.0 存在一些浪费带宽的现象。
如,客户端只需要某个对象的一部分,而服务器却将整个对象传过来,且不支持断点续传功能。
Http1.1 在请求头引入了 range头域,允许只请求资源的某个部分,返回码是206(Partial Content)
方便开发者自由的选择,便于重复利用带宽。
3)错误通知的管理
Http1.1 新增了24个错误状态码,
如:409(Conflict),表示请求的资源与资源的当前状态发送冲突
410(Gone),表示服务器上的某个资源被永久性的删除
4)Host头处理
Http1.0 HTTP1.0 认为每台服务器都绑定一个唯一的IP地址,
因此,请求消息中的URL并没有传递主机名(hostname)。
但是,一台物理服务器上可以存在多个虚拟主机,并且它们共享一个IP地址。
Http1.1 HTTP1.1 的请求消息和响应消息,都支持Host头域,
且请求消息中如果没有Host头域,会报错误(400 Bad Request)
5)长连接
Http1.0 使用 非持续连接,每次请求都要创建连接、慢启动、分配缓存和变量。
Http1.1 使用 持续连接,服务器发送响应后,仍在一段时间内保持这条连接。
持续连接支持请求的流水线处理。
减少了建立和关闭连接的消耗和延迟。
在HTTP1.1 中默认开启 Connect: keep-alive。
持续连接的两种工作方式:
1)非流水线方式
客户端收到前一个响应后才能发出下一个请求。
2)流水线方式
客户端收到HTTP响应报文之前,能够接着发送新的请求报文。
服务器可连续发回响应报文。
3、HTTPS 与 HTTP 的区别
HTTPS 需要到CA申请证书,一般免费证书很少,需要交费。
HTTP 运行在TCP之上,所有传输的内容都是明文,
HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
HTTP |---> TCP
------|-----------------------------------
HTTPS |---> SSL/TLS加密 -----> TCP
4、SPDY:Http1.x的优化
1)降低延迟
SPDY优雅的采取了多路复用(multiplexing)。
多路复用通过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,
降低了延迟、提高了带宽的利用率。
2)请求优先级(request prioritization)。
多路复用带来一个问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。
SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。
3)header压缩
HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。
4)基于HTTPS的加密协议传输,大大提高了传输数据的可靠性。
5)服务端推送(server push)
采用了SPDY的网页,例如网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,
服务端会将sytle.js的文件推送给客户端。
当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了
5、Http2.0:SPDY的升级版
SPDY位于HTTP之下,SSL和TCP之上 HTTP-->SPDY-->SSL-->TCP
HTTP2.0 和 SPDY 的区别:
1)HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
2)HTTP2.0 消息头的压缩算法采用 HPACK
SPDY 采用的 DEFLATE
6、Http2.0 和 Http1.x 相比的新特性
1)新的二进制格式(Binary Format)
HTTP1.x 的解析是基于文本
HTTP2.0 的解析采用二进制格式
2)多路复用(MultiPlexing)
连接共享
每一个request都是是用作连接共享机制的。
一个request对应一个id,一个连接上可以有多个request,
每个连接的request可以随机的混杂在一起,
接收方可以根据request的 id 将 request再归属到各自不同的请求里面。
由于TCP拥塞控制的慢启动策略,TCP连接的起初会限制连接传输的最大速度,
如果网络没有拥塞,会逐渐提高传输速度。
这让具有 突发性和短时性 的 Http连接 变得低效。(传输速度起来之前,可能请求已经结束)
多路复用,让所有数据共用同一个连接,可以更有效的使用TCP连接,重复利用带宽。
3)header压缩
HTTP1.x 的header带有大量信息,而且每次都要重复发送。
HTTP2.0 使用 encoder 来减少需要传输的header大小,
通讯双方各自cache一份header fields表,
既避免了重复header的传输,又减小了需要传输的大小。
HTTP2.0 可以维护一个字典,差量更新HTTP头部,大大降低因头部传输产生的流量。
4)服务端推送(server push)
同SPDY一样,HTTP2.0 也具有server push功能
比如,客户端请求一个index.html 静态页面,
服务端推送能把该静态页面所需要的资源(不如,main.js文件),伴随着index.html一起发送到客户端。
省去客户端请求 main.js的步骤。
7、HTTP2.0的多路复用 和 HTTP1.1 的长连接复用区别
HTTP/1.0 使用 非持续连接,一次请求-响应,建立一个连接,用完关闭;
每一个请求都要建立一个连接;
HTTP/1.1 使用 持续连接,服务器发送响应后,仍在一段时间内保持这条连接。
一个连接每次只能执行一个请求,如果该请求阻塞,其他请求无法使用该连接。
HTTP/2 多个请求可同时在一个连接上并行执行。
某个请求任务耗时严重,不会影响到其它连接的正常执行。
四、Http中get请求与post请求的区别
1、GET 请求:
1)参数长度受限制
GET 发送的数据存放在URL中,直接附加在URL后,利用1个问号("?")代表URL的结尾 &请求参数的开始
而URL 的长度是受限制的,最大长度 2048 个字符。
2)参数的数据类型
只允许传 ASCII 字符
3)安全性差
数据直接添加到URL后,对外可见
4)应用场景
小量、数据不敏感,比如请求获取一些不敏感的数据
2、POST 请求:
1)参数长度不受限制
2)参数数据类型不受限制
3)安全性高
请求数据一般放在请求体中
4)应用场景
大量、数据敏感,比如向服务器提交数据。
五、HTTP长连接处理
1、Http1.1 默认保持长连接
数据传输完成后,TCP连接不断开
2、建立长连接
1)Http头部字符:Connect,表示使用长连接后多少次失败后断开/超时时间/不适用长连接
表示不使用长连接: Connection: close
表示使用长连接的失败次数,超过20次则断开:
Connection: Keep-Alive
Keep-Alive: max=20
表示使用长连接的超时时间,超过20秒则断开:
Connection: Keep-Alive
Keep-Alive: time=20
2)Keep-Alive机制:Keep-Alive机制开启后,TCP层将定时发送相应的 KeepAlive 探针,确定连接的可用性
3、结束长连接
使用长连接后,客户端、服务端,如何知道本次传输结束?
1)判断传输数据是否达到了 Content-Length 指示的大小
2)根据Chunked编码判断:若Chunked编码的数据在最后有一个空的 Chunked块,表明本次传输数据结束。
附加:Https原理及流程
HTTPS在传输的过程中会涉及到三个密钥:
服务器端的公钥和私钥,用来进行非对称加密
客户端生成的随机密钥,用来进行对称加密
一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。
-
1.客户端向服务器发起HTTPS请求,连接到服务器的443端口
-
2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
-
3.服务器将自己的公钥发送给客户端。
-
4.客户端收到服务器端的公钥之后,会对公钥进行检查,验证其合法性。
如果公钥校验失败,那么HTTPS传输就无法继续。
如果公钥通过,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥。
这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。
-
5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
-
6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。
-
7.然后服务器将加密后的密文发送给客户端。
-
8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。
推荐阅读:
《计算机网络第七版 谢希仁》 第六章 应用层 第七章 网络安全
HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
清晰的计算机网络基础 学习指南