1. http的3个版本的区别
1.1. HTTP 1.0:像你家的大门
- 无连接:服务器处理完后立即断开TCP连接
- 无状态:服务器不跟踪每个客户端也不记录过去的请求
每次进出大门都要开门。
1.2. HTTP 1.1:像卧室的那张床
- 长连接:KeepAlived长连接避免了连接建立和释放的开销
- 有状态:通过Content-Length来判断当前请求数据是否已经全部接受
你可以躺在床上很久(长连接),直到你的定时闹钟(content-length)响起来。
1.3. HTTP 2.0:像自动工作的厨房
- 二进制流:引入二进制数据帧和流的概念,其中帧对数据进行顺序标识
- 多路复用:因为有了序列,服务器可以并行的传输数据
- 主动推送:支持服务器主动向客户端推送资源,而不需要客户端先请求
- 头部压缩:使用压缩算法对头部信息进行压缩,通讯双方各自缓存一份header_files表,既避免重复header的传输,又减少了需要传输的大小
厨房里有多条输送带同时工作(多路复用),把各种液体(二进制流)从冰箱直接推送到锅里(服务端主动推送),一种液体开始被推送前,它前面有一张有二维码的小纸条(头部压缩)标识这个液体的溯源信息。
2. https链接建立过程
1. 客户端(比如浏览器)向服务器发送一个连接请求,表明想要建立 HTTPS 连接。
2. 服务器返回数字证书,这个数字证书就是服务器的身份证,包含了服务器的名称、公钥等。
3. 客户端找CA机构验证数字证书是否合法有效。
这就好比收到一个陌生人的身份证,要去相关部门核实这张身份证是不是真的,以及是不是这个人的。
4. 客户端生成对称密钥。
5. 客户端用服务器公钥加密对称密钥并发送给服务器
6. 服务器用私钥解密获取对称密钥。
7. 双方使用对称密钥进行加密通信。
3. cookie和session
- 存储位置
- Cookie:存在客户端(通常是浏览器)。
- Session:存在服务端。
- 安全性
- Cookie:存在客户端,可能被篡改或窃取。
- Session:数据在服务器端,相对更安全。
- 存储容量
- Cookie:一般有存储大小的限制,通常为 4KB 左右。
- Session:理论上存储容量没有严格限制,取决于服务器的配置和资源。
- 生命周期
- Cookie:可以设置较长的生存时间,甚至可以持久存储。
- Session:默认情况下,当用户会话结束(如关闭浏览器),Session 数据会被销毁。但也可以通过编程设置 Session 的超时时间。
例如,在一个购物网站上选择了一些商品加入购物车。
- 如果用Cookie,会保存在浏览器,其他人使用电脑时能看到购物车内容。
- 如果用Session,会保存在服务端,只有在与服务器保持连接的会话期间能够访问这些信息。
4. 浏览器输入URL过程
1.浏览器解析 URL:确定要使用的协议(如 HTTP 、 HTTPS 等)、域名和资源路径。
2.发起 DNS 查询: 浏览器缓存、路由器缓存、DNS缓存 、host文件。
3.服务器建立 TCP 连接。
4.发送 HTTP 请求。
5.服务器处理请求:可能经过防火墙、网关、负载均衡器等。
6.服务器返回 HTTP 响应。
7.浏览器接收响应。
8.渲染页面。
9.关闭连接(根据协议和设置):在 HTTP 1.1 中,如果是持久连接,可能不会立即关闭;在 HTTP 2.0 中,通过多路复用,一个连接可处理多个请求和响应。