Alias的博客

既然有 HTTP 协议,为什么还要有 WebSocket?平时我们打开网页,比如购物网站某宝。都是点一下「列表商品」,跳转一下网页就到了「商品详情」。 从 HTTP 协议的角度来看,就是点一下网页上的某个按钮,前端发一次 HTTP请 求,网站返回一次 HTTP 响应。这种由客户端主动请求,服务器响应的方式也满足大部分网页的功能场景。 但有没有发现,这种情况下,服务器从来就「不会主动」给客户端...

既然有 HTTP 协议,为什么还要有 RPC?从 TCP 聊起作为一个程序员,假设我们需要在A电脑的进程发一段数据到B电脑的进程,我们一般会在代码里使用socket 进行编程。 这时候,我们可选项一般也就TCP和UDP二选一。TCP可靠,UDP不可靠。只要稍微对可靠性有些要求,普通人一般无脑选TCP就对了。 类似下面这样。 1fd = socket(AF_INET,SOCK_STREAM,0...

关于HTTP的ECDHE握手HTTPS 常用的密钥交换算法有两种,分别是 RSA 和 ECDHE 算法。 其中,RSA 是比较传统的密钥交换算法,它不具备前向安全的性质,因此现在很少服务器使用的。而 ECDHE 算法具有前向安全,所以被广泛使用。 离散对数ECDHE 密钥协商算法是 DH 算法演进过来的,所以我们先从 DH 算法说起。 DH 算法是非对称加密算法, 因此它可以用于密钥交换,该...

关于HTTP的RSA握手TLS 握手过程TLS 的握手过程,如下图: 上图简要概述了 TLS 的握手过程,其中每一个「框」都是一个记录(record),记录是 TLS 收发数据的基本单位,类似于 TCP 里的 segment。多个记录可以组合成一个 TCP 包发送,所以通常经过「四个消息」就可以完成 TLS 握手,也就是需要 2个 RTT 的时延,然后就可以在安全的通信环境里发送 HTTP...

HTTP相关问答HTTP基本概念HTTP 是什么?HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。 能否详细解释「超文本传输协议」? HTTP的名字「超文本协议传输」,它可以拆成三个部分: 超文本 传输 协议 1. 「协议」 针对 HTTP 协议,我们可以这么理解。 HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一...

输入网址到显示,期间发生了什么? HTTP 浏览器做的第一步工作是解析 URL 首先浏览器做的第一步工作就是要对 URL 进行解析,从而生成发送给 Web 服务器的请求信息。 让我们看看一条长长的 URL 里的各个元素的代表什么,见下图: 所以图中的长长的 URL 实际上是请求服务器里的文件资源。 要是上图中的蓝色部分 URL 元素都省略了,那应该是请求哪个文件呢? 当没有路径名时,...

TCP/IP网络模型为什么要有TCP/IP网络模型? 对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多种多样的设备,就协商出了一套通用的网络协议。 这个网络协议是分层的,每一层都有各自的作用和职责,接下来就根据「 TCP/IP 网络模型」分别对每一层进行介绍。 应用层最上层的,...

详谈Buffer Pool为什么要有Buffer Pool?虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。 要想提升查询性能,加个缓存就行了嘛。所以,当数据从磁盘中取出后,缓存内存中,下次查询同样的数据的时候,直接从内存中读取。 为此,Innodb 存储引擎设计了一个缓冲池(*Buffer Pool*),来提高数据库的读写性能。 有了缓冲...

mysql日志更新语句的流程会涉及到 undo log(回滚日志)、redo log(重做日志) 、binlog (归档日志)这三种日志: undo log(回滚日志):是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC。 redo log(重做日志):是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复; binlo...

mysql死锁死锁的发生本次案例使用存储引擎 Innodb,隔离级别为可重复读(RR)。 接下来,我用实战的方式来带大家看看死锁是怎么发生的。 我建了一张订单表,其中 id 字段为主键索引,order_no 字段普通索引,也就是非唯一索引: 1234567CREATE TABLE `t_order` ( `id` int NOT NULL AUTO_INCR...