@@ -2105,18 +2105,6 @@ URL 和 URI
21052105
21062106* 区别:` URL - HOST = URI ` ,URI 是抽象的定义,URL 用地址定位,URI 用名称定位。** 只要能唯一标识资源的是 URI,在 URI 的基础上给出其资源的访问方式的是 URL**
21072107
2108- 短连接和长连接:
2109-
2110- * 短连接:客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接
2111-
2112- 使用短连接的情况下,当浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源(图像文件、CSS 文件等),每遇到这样一个 Web 资源,浏览器就会经过三次握手重新建立一个 HTTP 会话
2113-
2114- * 长连接:使用长连接的 HTTP 协议,会在响应头加入这行代码 ` Connection:keep-alive `
2115-
2116- 使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive 有一个保持时间,不会永久保持连接,设置以后可以实现长连接,前提是需要客户端和服务端都支持长连接
2117-
2118- * HTTP 协议的长连接和短连接,实质上是 TCP 协议的长连接和短连接
2119-
21202108** 从浏览器地址栏输入 URL 到请求返回发生了什么?**
21212109
21222110* 进行 URL 解析,进行编码
@@ -2137,6 +2125,10 @@ URL 和 URI
21372125
21382126
21392127
2128+ 推荐阅读:https://xiaolincoding.com/network/
2129+
2130+
2131+
21402132***
21412133
21422134
@@ -2155,25 +2147,35 @@ HTTP 1.0 和 HTTP 1.1 的主要区别:
21552147
21562148* 长短连接:
21572149
2158- ** 在HTTP/1.0中,默认使用的是短连接** ,每次请求都要重新建立一次连接。HTTP 基于 TCP/IP 协议的,每一次建立或者断开连接都需要三次握手四次挥手,开销会比较大
2150+ ** 在HTTP/1.0中,默认使用的是短连接** ,每次请求都要重新建立一次连接,比如获取 HTML 和 CSS 文件,需要两次请求 。HTTP 基于 TCP/IP 协议的,每一次建立或者断开连接都需要三次握手四次挥手,开销会比较大
21592151
2160- ** HTTP 1.1起,默认使用长连接** ,默认开启 ` Connection: keep-alive ` ,HTTP/1.1 的持续连接有非流水线方式和流水线方式 ,流水线方式是客户端在收到 HTTP 的响应报文之前就能接着发送新的请求报文,非流水线方式是客户端在收到前一个响应后才能发送下一个请求
2152+ ** HTTP 1.1起,默认使用长连接** ,默认开启 ` Connection: keep-alive ` ,Keep-Alive 有一个保持时间,不会永久保持连接。持续连接有非流水线方式和流水线方式 ,流水线方式是客户端在收到 HTTP 的响应报文之前就能接着发送新的请求报文,非流水线方式是客户端在收到前一个响应后才能发送下一个请求
2153+
2154+ HTTP 协议的长连接和短连接,实质上是 TCP 协议的长连接和短连接
21612155
21622156* 错误状态响应码:在 HTTP1.1 中新增了 24 个错误状态响应码,如 409(Conflict)表示请求的资源与资源的当前状态发生冲突,410(Gone)表示服务器上的某个资源被永久性的删除
21632157
2164- * 缓存处理:在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的 ** 缓存控制策略 ** 例如 Entity tag,If-Unmodified-Since,If-Match,If-None-Match等
2158+ * 缓存处理:在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略, 例如 Entity tag,If-Unmodified-Since,If-Match,If-None-Match等
21652159
2166- * 带宽优化及网络连接的使用:HTTP1.0 存在一些浪费带宽的现象,例如客户端只需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能 ,HTTP1.1 则在请求头引入了 range 头域,允许只** 请求资源的某个部分** ,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接
2160+ * 带宽优化及网络连接的使用:HTTP1.0 存在一些浪费带宽的现象,例如客户端只需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持 ** 断点续传 ** 功能 ,HTTP1.1 则在请求头引入了 range 头域,允许只** 请求资源的某个部分** ,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接
21672161
21682162* HOST 头处理:在 HTTP1.0 中认为每台服务器都绑定一个唯一的 IP 地址,因此请求消息中的 URL 并没有传递主机名。HTTP1.1 时代虚拟主机技术发展迅速,在一台物理服务器上可以存在多个虚拟主机,并且共享一个 IP 地址,故 HTTP1.1 增加了 HOST 信息
21692163
21702164HTTP 1.1 和 HTTP 2.0 的主要区别:
21712165
21722166* 新的二进制格式:HTTP1.1 基于文本格式传输数据,HTTP2.0 采用二进制格式传输数据,解析更高效
2173- * ** 多路复用** :在一个连接里,允许同时发送多个请求或响应,** 并且这些请求或响应能够并行的传输而不被阻塞** ,避免 HTTP1.1 出现的队头堵塞问题
2174- * 头部压缩,HTTP1.1 的 header 带有大量信息,而且每次都要重复发送;HTTP2.0 把 header 从数据中分离,并封装成头帧和数据帧,** 使用特定算法压缩头帧** 。并且 HTTP2.0 在客户端和服务器端记录了之前发送的键值对,对于相同的数据不会重复发送。比如请求 A 发送了所有的头信息字段,请求 B 则只需要发送差异数据,这样可以减少冗余数据,降低开销
2167+ * ** 多路复用** :在一个连接里,允许同时发送多个请求或响应,并且这些请求或响应能够并行的传输而不被阻塞,避免 HTTP1.1 出现的队头堵塞问题
2168+ * 头部压缩,HTTP1.1 的 header 带有大量信息,而且每次都要重复发送;HTTP2.0 把 header 从数据中分离,并封装成头帧和数据帧,使用特定算法压缩头帧。并且 HTTP2.0 在客户端和服务器端记录了之前发送的键值对,对于相同的数据不会重复发送。比如请求 A 发送了所有的头信息字段,请求 B 则只需要发送差异数据,这样可以减少冗余数据,降低开销
21752169* ** 服务端推送** :HTTP2.0 允许服务器向客户端推送资源,无需客户端发送请求到服务器获取
21762170
2171+
2172+
2173+ ****
2174+
2175+
2176+
2177+ ## 安全请求
2178+
21772179HTTP 和 HTTPS 的区别:
21782180
21792181* 端口 :HTTP 默认使用端口 80,HTTPS 默认使用端口 443
@@ -2187,17 +2189,23 @@ HTTP 和 HTTPS 的区别:
21872189 * 缺点:无法安全的将密钥传输给通信方
21882190
21892191* 非对称加密:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥,** 公钥公开给任何人** (类似于把锁和箱子给别人,对方打开箱子放入数据,上锁后发送),典型的非对称加密算法有 RSA、DSA 等
2190- * 优点:可以更安全地将公开密钥传输给通信发送方
2191- * 缺点:运算速度慢
2192-
2192+
2193+ * 公钥加密,私钥解密:为了** 保证内容传输的安全** ,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容
2194+ * 私钥加密,公钥解密:为了** 保证消息不会被冒充** ,因为私钥是不可泄露的,如果公钥能正常解密出私钥加密的内容,就能证明这个消息是来源于持有私钥身份的人发送的
2195+ * 可以更安全地将公开密钥传输给通信发送方,但是运算速度慢
2196+
21932197* ** 使用对称加密和非对称加密的方式传送数据**
21942198
21952199 * 使用非对称密钥加密方式,传输对称密钥加密方式所需要的 Secret Key,从而保证安全性
21962200 * 获取到 Secret Key 后,再使用对称密钥加密方式进行通信,从而保证效率
21972201
21982202 思想:锁上加锁
2199-
2200- * 数字签名:附加在报文上的特殊加密校验码,可以防止报文被篡改,一般是通过哈希算法
2203+
2204+ 名词解释:
2205+
2206+ * 哈希算法:通过哈希函数计算出内容的哈希值,传输到对端后会重新计算内容的哈希,进行哈希比对来校验内容的完整性
2207+
2208+ * 数字签名:附加在报文上的特殊加密校验码,可以防止报文被篡改。一般是通过私钥对内容的哈希值进行加密,公钥正常解密并对比哈希值后,可以确保该内容就是对端发出的,防止出现中间人替换的问题
22012209
22022210* 数字证书:由权威机构给某网站颁发的一种认可凭证
22032211
@@ -2206,9 +2214,9 @@ HTTPS 工作流程:服务器端的公钥和私钥,用来进行非对称加
22062214![ ] ( https://seazean.oss-cn-beijing.aliyuncs.com/img/Web/HTTP-HTTPS加密过程.png )
22072215
220822161 . 客户端向服务器发起 HTTPS 请求,连接到服务器的 443 端口,请求携带了浏览器支持的加密算法和哈希算法,协商加密算法
2209- 2 . 服务器端会向数字证书认证机构提出公开密钥的申请,认证机构对公开密钥做数字签名后进行分配,会将公钥绑定在数字证书 (又叫公钥证书,内容有公钥,网站地址,证书颁发机构,失效日期等)
2217+ 2 . 服务器端会向数字证书认证机构注册公开密钥,认证机构 ** 用 CA 私钥 ** 对公开密钥做数字签名后绑定在数字证书 (又叫公钥证书,内容有公钥,网站地址,证书颁发机构,失效日期等)
221022183 . 服务器将数字证书发送给客户端,私钥由服务器持有
2211- 4 . 客户端收到服务器端的数字证书后对证书进行检查,验证其合法性,如果发现发现证书有问题,那么 HTTPS 传输就无法继续 。如果公钥合格,那么客户端会生成一个随机值,** 这个随机值就是用于进行对称加密的密钥** ,将该密钥称之为 client key(客户端密钥、会话密钥)。用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文,HTTPS 中的第一次 HTTP 请求结束
2219+ 4 . 客户端收到服务器端的数字证书后 ** 通过 CA 公钥 ** (事先置入浏览器或操作系统)对证书进行检查,验证其合法性 。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,将该密钥称之为 client key(客户端密钥、会话密钥)。用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文,HTTPS 中的第一次 HTTP 请求结束
221222205 . 客户端会发起 HTTPS 中的第二个 HTTP 请求,将加密之后的客户端密钥发送给服务器
221322216 . 服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文
221422227 . 服务器将加密后的密文发送给客户端
0 commit comments