1515- [ HTTP状态码有哪些?] ( #http%E7%8A%B6%E6%80%81%E7%A0%81%E6%9C%89%E5%93%AA%E4%BA%9B )
1616- [ POST和GET的区别?] ( #post%E5%92%8Cget%E7%9A%84%E5%8C%BA%E5%88%AB )
1717- [ HTTP长连接和短连接?] ( #http%E9%95%BF%E8%BF%9E%E6%8E%A5%E5%92%8C%E7%9F%AD%E8%BF%9E%E6%8E%A5 )
18+ - [ HTTP1.1和 HTTP2.0的区别?] ( #http11%E5%92%8C-http20%E7%9A%84%E5%8C%BA%E5%88%AB )
19+ - [ HTTPS与HTTP的区别?] ( #https%E4%B8%8Ehttp%E7%9A%84%E5%8C%BA%E5%88%AB )
20+ - [ 什么是数字证书?] ( #%E4%BB%80%E4%B9%88%E6%98%AF%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6 )
21+ - [ HTTPS原理] ( #https%E5%8E%9F%E7%90%86 )
22+ - [ DNS 的解析过程?] ( #dns-%E7%9A%84%E8%A7%A3%E6%9E%90%E8%BF%87%E7%A8%8B )
23+ - [ 浏览器中输入URL返回页面过程?] ( #%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%AD%E8%BE%93%E5%85%A5url%E8%BF%94%E5%9B%9E%E9%A1%B5%E9%9D%A2%E8%BF%87%E7%A8%8B )
1824- [ 什么是cookie和session?] ( #%E4%BB%80%E4%B9%88%E6%98%AFcookie%E5%92%8Csession )
1925- [ Cookie和Session的区别?] ( #cookie%E5%92%8Csession%E7%9A%84%E5%8C%BA%E5%88%AB )
2026- [ 什么是对称加密和非对称加密?] ( #%E4%BB%80%E4%B9%88%E6%98%AF%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86%E5%92%8C%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86 )
2834
2935<!-- END doctoc generated TOC please keep comment here to allow auto update -->
3036
31- > 首先给大家分享一个github仓库,上面放了** 200多本经典的计算机书籍** ,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~
32- >
33- > github地址:https://github.com/Tyson0314/java-books
34- >
35- > 如果github访问不了,可以访问gitee仓库。
36- >
37- > gitee地址:https://gitee.com/tysondai/java-books
38-
3937## 网络分层结构
4038
4139计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。
@@ -47,7 +45,7 @@ TCP/IP五层模型:应用层、传输层、网络层、数据链路层、物
4745- ** 应用层** :为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。
4846- ** 传输层** :负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP。
4947- ** 网络层** :选择合适的路由和交换结点,确保数据及时传送。主要包括IP协议。
50- - ** 数据链路层** :在两个相邻节点之间传送数据时,** 数据链路层将网络层交下来的 IP 数据报组装成帧** ,在两个相邻节点间的链路上传送帧。
48+ - ** 数据链路层** :在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。
5149- ** 物理层** :实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异。
5250
5351## 三次握手
@@ -172,93 +170,93 @@ Content-Length:112
172170
173171HTTP长连接,指的是** 复用TCP连接** 。多个HTTP请求可以复用同一个TCP连接,这就节省了TCP连接建立和断开的消耗。
174172
175- 1 . ## HTTP1.1和 HTTP2.0的区别?
173+ ## HTTP1.1和 HTTP2.0的区别?
176174
177- HTTP2.0相比HTTP1.1支持的特性:
175+ HTTP2.0相比HTTP1.1支持的特性:
178176
179- * ** 新的二进制格式** :HTTP1.1 基于文本格式传输数据;HTTP2.0采用二进制格式传输数据,解析更高效。
177+ * ** 新的二进制格式** :HTTP1.1 基于文本格式传输数据;HTTP2.0采用二进制格式传输数据,解析更高效。
180178
181- * ** 多路复用** :在一个连接里,允许同时发送多个请求或响应,** 并且这些请求或响应能够并行的传输而不被阻塞** ,避免 HTTP1.1 出现的”队头堵塞”问题。
179+ * ** 多路复用** :在一个连接里,允许同时发送多个请求或响应,** 并且这些请求或响应能够并行的传输而不被阻塞** ,避免 HTTP1.1 出现的”队头堵塞”问题。
182180
183- * ** 头部压缩** ,HTTP1.1的header带有大量信息,而且每次都要重复发送;HTTP2.0 把header从数据中分离,并封装成头帧和数据帧,** 使用特定算法压缩头帧** ,有效减少头信息大小。并且HTTP2.0** 在客户端和服务器端记录了之前发送的键值对,对于相同的数据,不会重复发送。** 比如请求a发送了所有的头信息字段,请求b则** 只需要发送差异数据** ,这样可以减少冗余数据,降低开销。
181+ * ** 头部压缩** ,HTTP1.1的header带有大量信息,而且每次都要重复发送;HTTP2.0 把header从数据中分离,并封装成头帧和数据帧,** 使用特定算法压缩头帧** ,有效减少头信息大小。并且HTTP2.0** 在客户端和服务器端记录了之前发送的键值对,对于相同的数据,不会重复发送。** 比如请求a发送了所有的头信息字段,请求b则** 只需要发送差异数据** ,这样可以减少冗余数据,降低开销。
184182
185- * ** 服务端推送** :HTTP2.0允许服务器向客户端推送资源,无需客户端发送请求到服务器获取。
183+ * ** 服务端推送** :HTTP2.0允许服务器向客户端推送资源,无需客户端发送请求到服务器获取。
186184
187- ## HTTPS与HTTP的区别?
185+ ## HTTPS与HTTP的区别?
188186
189- 1 . HTTP是超文本传输协议,信息是** 明文传输** ;HTTPS则是具有** 安全性** 的ssl加密传输协议。
190- 2 . HTTP和HTTPS用的端口不一样,HTTP端口是80,HTTPS是443。
191- 3 . HTTPS协议** 需要到CA机构申请证书** ,一般需要一定的费用。
192- 4 . HTTP运行在TCP协议之上;HTTPS运行在SSL协议之上,SSL运行在TCP协议之上。
187+ 1 . HTTP是超文本传输协议,信息是** 明文传输** ;HTTPS则是具有** 安全性** 的ssl加密传输协议。
188+ 2 . HTTP和HTTPS用的端口不一样,HTTP端口是80,HTTPS是443。
189+ 3 . HTTPS协议** 需要到CA机构申请证书** ,一般需要一定的费用。
190+ 4 . HTTP运行在TCP协议之上;HTTPS运行在SSL协议之上,SSL运行在TCP协议之上。
193191
194- ## 什么是数字证书?
192+ ## 什么是数字证书?
195193
196- 服务端可以向证书颁发机构CA申请证书,以避免中间人攻击(防止证书被篡改)。证书包含三部分内容:** 证书内容、证书签名算法和签名** ,签名是为了验证身份。
194+ 服务端可以向证书颁发机构CA申请证书,以避免中间人攻击(防止证书被篡改)。证书包含三部分内容:** 证书内容、证书签名算法和签名** ,签名是为了验证身份。
197195
198- ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20211004111441594.png )
196+ ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20211004111441594.png )
199197
200- 服务端把证书传输给浏览器,浏览器从证书里取公钥。证书可以证明该公钥对应本网站。
198+ 服务端把证书传输给浏览器,浏览器从证书里取公钥。证书可以证明该公钥对应本网站。
201199
202- ** 数字签名的制作过程** :
200+ ** 数字签名的制作过程** :
203201
204- 1 . CA使用证书签名算法对证书内容进行** hash运算** 。
205- 2 . 对hash后的值** 用CA的私钥加密** ,得到数字签名。
202+ 1 . CA使用证书签名算法对证书内容进行** hash运算** 。
203+ 2 . 对hash后的值** 用CA的私钥加密** ,得到数字签名。
206204
207- ** 浏览器验证过程** :
205+ ** 浏览器验证过程** :
208206
209- 1 . 获取证书,得到证书内容、证书签名算法和数字签名。
210- 2 . 用CA机构的公钥** 对数字签名解密** (由于是浏览器信任的机构,所以浏览器会保存它的公钥)。
211- 3 . 用证书里的签名算法** 对证书内容进行hash运算** 。
212- 4 . 比较解密后的数字签名和对证书内容做hash运算后得到的哈希值,相等则表明证书可信。
207+ 1 . 获取证书,得到证书内容、证书签名算法和数字签名。
208+ 2 . 用CA机构的公钥** 对数字签名解密** (由于是浏览器信任的机构,所以浏览器会保存它的公钥)。
209+ 3 . 用证书里的签名算法** 对证书内容进行hash运算** 。
210+ 4 . 比较解密后的数字签名和对证书内容做hash运算后得到的哈希值,相等则表明证书可信。
213211
214- ## HTTPS原理
212+ ## HTTPS原理
215213
216- 首先是TCP三次握手,然后客户端发起一个HTTPS连接建立请求,客户端先发一个` Client Hello ` 的包,然后服务端响应` Server Hello ` ,接着再给客户端发送它的证书,然后双方经过密钥交换,最后使用交换的密钥加解密数据。
214+ 首先是TCP三次握手,然后客户端发起一个HTTPS连接建立请求,客户端先发一个` Client Hello ` 的包,然后服务端响应` Server Hello ` ,接着再给客户端发送它的证书,然后双方经过密钥交换,最后使用交换的密钥加解密数据。
217215
218- 1 . ** 协商加密算法** 。在` Client Hello ` 里面客户端会告知服务端自己当前的一些信息,包括客户端要使用的TLS版本,支持的加密算法,要访问的域名,给服务端生成的一个随机数(Nonce)等。需要提前告知服务器想要访问的域名以便服务器发送相应的域名的证书过来。
216+ 1 . ** 协商加密算法** 。在` Client Hello ` 里面客户端会告知服务端自己当前的一些信息,包括客户端要使用的TLS版本,支持的加密算法,要访问的域名,给服务端生成的一个随机数(Nonce)等。需要提前告知服务器想要访问的域名以便服务器发送相应的域名的证书过来。
219217
220- ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921104210833.png )
218+ ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921104210833.png )
221219
222- 2 . 服务端响应` Server Hello ` ,告诉客户端服务端** 选中的加密算法** 。
220+ 2 . 服务端响应` Server Hello ` ,告诉客户端服务端** 选中的加密算法** 。
223221
224- ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921105450791.png )
222+ ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921105450791.png )
225223
226- 3 . 接着服务端给客户端发来了2个证书。第二个证书是第一个证书的签发机构(CA)的证书。
224+ 3 . 接着服务端给客户端发来了2个证书。第二个证书是第一个证书的签发机构(CA)的证书。
227225
228- ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20211004172007102.png )
226+ ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20211004172007102.png )
229227
230- 4 . 客户端使用证书的认证机构CA公开发布的RSA公钥** 对该证书进行验证** ,下图表明证书认证成功。
228+ 4 . 客户端使用证书的认证机构CA公开发布的RSA公钥** 对该证书进行验证** ,下图表明证书认证成功。
231229
232- ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921105929268.png )
230+ ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921105929268.png )
233231
234- 5 . 验证通过之后,浏览器和服务器通过** 密钥交换算法** 产生共享的** 对称密钥** 。
232+ 5 . 验证通过之后,浏览器和服务器通过** 密钥交换算法** 产生共享的** 对称密钥** 。
235233
236- ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921110025197.png )
234+ ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921110025197.png )
237235
238- ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921110155075.png )
236+ ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921110155075.png )
239237
240- 6 . 开始传输数据,使用同一个对称密钥来加解密。
238+ 6 . 开始传输数据,使用同一个对称密钥来加解密。
241239
242- ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921110315068.png )
240+ ![ ] ( https://gitee.com/tysondai/img/raw/master/image-20210921110315068.png )
243241
244- ## DNS 的解析过程?
242+ ## DNS 的解析过程?
245243
246- 1 . 浏览器搜索** 自己的DNS缓存**
247- 2 . 若没有,则搜索** 操作系统中的DNS缓存和hosts文件**
248- 3 . 若没有,则操作系统将域名发送至** 本地域名服务器** ,本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则依次向** 根域名服务器、顶级域名服务器、权限域名服务器** 发起查询请求,最终返回IP地址给本地域名服务器
249- 4 . 本地域名服务器将得到的IP地址返回给** 操作系统** ,同时自己也** 将IP地址缓存起来**
250- 5 . 操作系统将 IP 地址返回给浏览器,同时自己也将IP地址缓存起来
251- 6 . 浏览器得到域名对应的IP地址
244+ 1 . 浏览器搜索** 自己的DNS缓存**
245+ 2 . 若没有,则搜索** 操作系统中的DNS缓存和hosts文件**
246+ 3 . 若没有,则操作系统将域名发送至** 本地域名服务器** ,本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则依次向** 根域名服务器、顶级域名服务器、权限域名服务器** 发起查询请求,最终返回IP地址给本地域名服务器
247+ 4 . 本地域名服务器将得到的IP地址返回给** 操作系统** ,同时自己也** 将IP地址缓存起来**
248+ 5 . 操作系统将 IP 地址返回给浏览器,同时自己也将IP地址缓存起来
249+ 6 . 浏览器得到域名对应的IP地址
252250
253- ## 浏览器中输入URL返回页面过程?
251+ ## 浏览器中输入URL返回页面过程?
254252
255- 1 . ** 解析域名** ,找到主机 IP。
256- 2 . 浏览器利用 IP 直接与网站主机通信,** 三次握手** ,建立 TCP 连接。浏览器会以一个随机端口向服务端的 web 程序 80 端口发起 TCP 的连接。
257- 3 . 建立 TCP 连接后,浏览器向主机发起一个HTTP请求。
258- 4 . 服务器** 响应请求** ,返回响应数据。
259- 5 . 浏览器** 解析响应内容,进行渲染** ,呈现给用户。
253+ 1 . ** 解析域名** ,找到主机 IP。
254+ 2 . 浏览器利用 IP 直接与网站主机通信,** 三次握手** ,建立 TCP 连接。浏览器会以一个随机端口向服务端的 web 程序 80 端口发起 TCP 的连接。
255+ 3 . 建立 TCP 连接后,浏览器向主机发起一个HTTP请求。
256+ 4 . 服务器** 响应请求** ,返回响应数据。
257+ 5 . 浏览器** 解析响应内容,进行渲染** ,呈现给用户。
260258
261- ![ ] ( https://gitee.com/tysondai/img/raw/master/输入url返回页面过程1.png )
259+ ![ ] ( https://gitee.com/tysondai/img/raw/master/输入url返回页面过程1.png )
262260
263261
264262## 什么是cookie和session?
0 commit comments