一、从地址栏输入URL到页面加载完成发生了什么?
- 浏览器开启一个线程来处理这个请求,对URL判断如果是http协议就按照web方式处理
- 浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容(此时没有向服务端发请求)。若没有,则进行下一步操作(后面需要向服务端发送请求)
- 过DNS解析获取网址的IP地址
- 向真实IP地址服务器发起tcp连接,与浏览器建立tcp三次握手
- 握手成功后,进行HTTP协议会话,浏览器发送报头(请求报头)
- 进入到web服务器上的 Web Server,如 Apache、Tomcat、Node.JS 等服务器
- 进入部署好的后端应用,如 PHP、Java、JavaScript、Python 等,找到对应的请求处理
- 处理结束回馈报头,将数据返回至浏览器
- 浏览器开始下载html文档(响应报头,状态码200),同时设置缓存
- 之后浏览器对整个 HTML 结构进行解析,形成 DOM 树;与此同时,它还需要对相应的 CSS 文件进行解析,形成 CSS 树(CSSOM)。接下来,需要结合 DOM + CSSOM,渲染形成一个绘制树(Render Tree)
- 得到绘制树之后,需要计算每个结点在页面中的位置,这一个过程称为layout
- layout的过程是在一个连续的二维平面上进行的,接下来,需要将这些结果栅格化,映射到屏幕的离散二维平面上,这一过程称为 paint ; 现代浏览器为提升性能,将页面划分多个 layer,各自进行 paint 然后组合成一个页面(composite layers)
二、TCP和UDP
- TCP是面向连接的运输层协议;UDP是无连接的,即发送数据之前不需要建立链接,因此减少了开销和发送数据的时延
- TCP提供可靠交付的服务,通过TCP连接传送的数据,无差错、不丢失、不重复、并且按时到达;UDP使用最大努力交付,即不保证可靠性交付,因此主机不需要维持复杂的连接状态
- TCP面向字节流,TCP中的“流”指的是流入到进程或从进程流出的字节序列;UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层
- UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低,符合很多实时应用(如IP电话、实时视频会议等)的要求
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的;UDP支持一对一、一对多、多对一和多对多的交互通信
- UDP的首部开销小,只有8个字节,比TCP的20个字节的首部短
- TCP提供可靠的全双工通信(双向实时通信),TCP允许通信双方的应用进程在任何时候都能发送数据;UDP是不可靠信道
三、请求方式
- GET请求在浏览器回退时是无害的,POST会再次提交请求
- GET请求产生的URL地址可以被收藏,而POST不可以
- GET请求会被浏览器主动缓存,而POST不会,除非手动设置
- GET请求只能进行URL编码,而POST支持多种编码方式
- GET请求参数会被完整的保留在浏览器历史记录里,而POST中的参数不会被保留
- GET请求在URL中传递的参数是有长度限制的(不固定,因浏览器决定),而POST没有限制
- GET请求只接受ASC2字符,而对参数的数据类型POST没有限制
- GET请求比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感数据
- GET请求参数通过URL传递,而POST放在request.body上
四、cookie、localStorage、sessionStorage区别
- 从数据生命周期上来说
• cookie:一般由服务器端生成,可设置失效时间,如果在浏览器端生成cookie,则默认关闭浏览器后失效。
• localStorage: 永久保存,除非被清除。
• sessionStorage: 仅在当前会话下有效,关闭页面或者浏览器被清除。 - 从数据存储方面来说
• cookie大小为4KB左右
• storage一般为5MB - 从与服务器端通信方面
• cookie每次都会携带在HTTP头中,如果cookie保存过多会带来性能问题
• storage仅在客户端保存,不参与和服务器的通信 - 从易用性方面来说
• cookie原生接口不友好
• storage原生接口友好,也可自行封装
五、CDN
六、问题
- 请详细介绍一下TCP三次握手机制,为什么要三次握手?
1.1 为什么要有握手?
1.2 为什么是三次?
可靠性、需要同步序列号,所以需要握手 - 简单介绍下HTTP协议中缓存的处理流程?
2.1 缓存的应用流程是什么?
2.2 与缓存相关的HTTP头部有哪些? - 在地址栏键入URL后,网络世界发生么什么?
- 使用HTTP长连接有哪些优点?
- CLOSE_WAIT状态产生的原因?
- 介绍下多播是怎样实现的?
- 服务器的最大并发连接数是多少?
- TCP和UDP协议该如何选择?
- TLS/SSL协议是如何保障信息安全的?
- HTTP2协议有哪些优点?