1、介绍下从浏览器地址栏输入url到显示页面的全过程
- 输入
url
后会通过DNS
解析,实现网址到IP
地址的转换 - 建立
TCP
链接,经过三次握手成功建立连接 - 客户端发起http请求网页数据,后台返回网页数据给浏览器
- 读取页面内容,浏览器渲染,构建
DOM
树、构建CSSOM
树 - 将解析步骤中创建的
CSSOM
树和DOM
树合成为Render
树,然后用于计算每个可见元素的布局,最后将其绘制到屏幕上
2、简单介绍下TCP的三次握手
- 客户端向服务器发送一个
SYN
包,并等待服务器确认。 - 服务器接收到客户端发来的
SYN
包后,对该包进行确认后结束LISTEN
阶段,并返回一段TCP
报文。 - 客户端接收到发送的
SYN + ACK
包后,明确了从客户端到服务器的数据传输是正常的,从而结束SYN-SEN
T 阶段,并返回最后一段报文。 - 当服务器端收到来自客户端确认收到服务器数据的报文后,得知从服务器到客户端的数据传输是正常的,从而结束 SYN-RECV 阶段,进入 ESTABLISHED 阶段,从而完成三次握手。
3、简单介绍下TCP的四次挥手
和三次握手的发起者必须是客户端不同,断开 TCP 连接的发起方可以是任何一方。为了方便讲解,下面我们以客户端作为发起者进行描述。
- 第一次挥手,客户端向服务端发送 TCP 请求,FIN 设置为 1,seq 设置为一个随机数 x,FIN 是一个标志位,表示结束(finish)的意思,1 等同于 true。seq 是个序列号,一个装数据的地方,我们这里给他设置为一个随机数,用于给服务端做确认,好对应上这个 TCP 请求。
- 第二次挥手,服务端发送 TCP,并将 TCP 头部中的ACK 设置为 1(acknowledge,表示 “收到” 的意思),ack 确认号设置为 x+1(x 来自第一次挥手),当客户端收到这个 TCP 请求时,表示从客户端到服务端的通道已经关闭,你不能再向服务端发正常的数据请求了。此时服务端到客户端还是可以发送数据的。如果服务端有一些之前的 TCP 请求没来得及响应,在第二次挥手和第三次挥手期间还是可以去返回的。
- 第三次挥手,服务端向客户端发送 TCP 请求:FIN 设置为 1,seq 设置为一个随机数 y。类似第一次挥手,只是这次发送方为服务端。
- 第四次挥手,客户端向服务端发送 TCP 请求:ACK 设置为 1,ack 确认号设置为 y+1。服务端接收到这个请求后,服务端就能成功变成关闭(CLOSE)状态。客户端则会等一段时间再进入关闭状态,因为第四次挥手不一定能成功发给服务端,所以要等一下,看看服务端会不会因为没收到第四次挥手,而重发第三次挥手。
4、link和@import 引入CSS有什么区别?
link
和@import
是外部引入CSS
的两种方式。link
只能在HTML
页面中引入外部样式,在加载页面时会被同时加载。@import
既可以在HTML
页面中导入外部样式,也可以在css
样式文件中导入外部css
样式,将在页面加载完毕后才会被加载。
5、如何做好SEO优化?
- 多使用html语义化标签,保证网站结构的清晰、简洁
- 关键词优化
- 内容优化:要提供高质量、有价值的内容,吸引用户留下来,增加用户停留时间和页面访问量,同时也可以提升网站的信誉度和排名。
- 外部链接优化:多添加高权重外链
6、HTML性能优化能做哪些?
- DNS解析优化:可能稳定的DNS服务器
- 浏览器下载、解析、渲染页面优化:优化 CSS 性能,减少外部HTTP请求,压缩 CSS, JS 和 HTML,使用 CDN 和缓存提高速度。
- 服务端处理优化:Redis缓存、数据库存储优化或是系统内的各种中间件以及Gzip压缩等。