这几天一直在看关于HTTP和前端性能优化相关的内容,今天先写一篇关于HTTP的文章,若是时间容许的话再接着把前端性能优化的写完。毕竟还要留着时间去看小片嘛😌前端
接下来就是正文啦!面试
浏览器输入URL后HTTP请求返回的完整过程
就是下图这个啦(这个但是我从某课网偷来的)浏览器

从输入地址到页面渲染

在HTTP的五层分层中:缓存
- 应用层为应用软件提供了不少服务,构建于TCP协议之上,屏蔽网络传输相关细节
- 传输层向用户提供可靠的端到端(End-to-End)服务,向高层屏蔽了下层数据通讯的细节
- 网络层为数据在结点之间传输建立逻辑链路
- 数据链路层在通讯的实体间创建数据链路
- 物理层主要做用是定义物理设备如何传输数据

#### 统一资源标识符URI性能优化
URI用字符串标识某一互联网资源,包括URL和URN。服务器
URL为统一资源定位符,表示资源的地点(互联网上所处的位置);网络
URN为永久统一资源定位符:资源在移动以后还能被找到,目前尚未很是成功的使用方案。前端性能
#### TCP链接中的三次握手与四次挥手性能
这部份内容是面试中的重点,尤为是SYN、ACK啥的,好乱😵优化
先放图😏

其中:起初两端的TCP进程都是CLOSED状态。主动打开链接的是客户端,被动打开链接的是服务器
- 第一次握手:客户端向服务器发出链接请求保温,这是报文首部中的同部位SYN=1,同时选择一个初始序列号seq=x,此时,TCP客户端进程进入了SYN-SENT(同步已发送状态)。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但须要消耗掉一个序号。
- 第二次握手:服务器收到请求报文后,若是赞成链接就发出确认报文。确认报文中ack=1,SYN=1,确认号为ACK=x+1,同时也要为本身初始化一个序号seq=y,此时服务器进入了SYN-RCVD(同步收到)状态。这个报文不能携带数据,可是一样要消耗一个序号。
- 第三次握手:客户端收到确认后,还要向服务器给出确认。确认报文的ack=1,ACK=y+1,本身的序列号seq=x+1,此时,TCP链接创建,客户端进入ESTABLISHED(已创建链接)状态。TCP规定,ACK报文段能够携带数据,可是若是不携带数据则不消耗序号。
当服务端收到客户端的确认后也进入ESTABLISHED状态,此后双方就能够开始连通了。
四次挥手:
- 第一次挥手:客户端向服务器发送一个FIN报文段,将设置seq=x+2和ACK=y+1,;此时,客户端进入 FIN_WAIT_1状态,这表示客户端没有数据要发送服务器了,请求关闭链接;
- 第二次挥手:服务器收到了客户端发送的FIN报文段,向客户端回一个ACK报文段,ACK=x+3;服务器进入了CLOSE_WAIT状态,客户端收到服务器返回的ACK报文后,进入FIN_WAIT_2状态;
- 第三次挥手:服务器会观察本身是否还有数据没有发送给客户端,若是有,先把数据发送给客户端,再发送FIN报文;若是没有,那么服务器直接发送FIN报文给客户端。请求关闭链接,同时服务器进入LAST_ACK状态;
- 第四次挥手:客户端收到服务器发送的FIN报文段,向服务器发送ACK报文段,而后客户端进入TIME_WAIT状态;服务器收到客户端的ACK报文段之后,就关闭链接;此时,客户端等待2MSL后依然没有收到回复,则证实Server端已正常关闭,客户端也能够关闭链接了。
好啦,忽然看了看,剩下总结的均可以归为缓存了,那就在下一篇里面再写吧,拜拜了您呐😁