输入URL发生什么?
- DNS 域名解析,从 url 中解析出端口号
- 浏览器与目标服务器建立一条 TCP 连接
- 浏览器向服务器发送一条 HTTP 请求
- 服务器返回给浏览器一条 HTTP 响应
- 浏览器进行渲染
- 关闭 TCP 连接(四次挥手)
浏览器渲染的步骤
- 解析html,创建dom树,自上而下的顺序
- 解析css,优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式;
- 将css与dom合并,构建渲染树
- 布局重绘重排,页面完成渲染。
浏览器解析文档的过程中,如果遇到 script 标签,会立即解析脚本,停止解析文档(因为 JS 可能会改变 DOM 和 CSS,如果继续解析会造成浪费)。 如果是外部 script, 会等待脚本下载完成之后在继续解析文档。现在 script 标签增加了 defer 和 async 属性,脚本解析会将脚本中改变 DOM 和 css 的地方> 解析出来,追加到 DOM Tree 和 Style Rules 上
页面渲染优化
- HTML 样式结构层次尽量简单,最好不深于 6 层,
- 脚本尽量放后边,避免组织页面加载
- 脚本减少 DOM 操作,减少回流
- 尽量减少 JS 修改样式,可以通过修改 class 名的方式解决
- 动画在屏幕外或页面滚动时,尽量停止
强制缓存和协商缓存
- 强制缓存是我们在第一次请求资源时在 http 响应头设置一个过期时间,在时效内都将直接从浏览器进行获取,常见的 http 响应头字段如 Cache-Control 和 Expires
- 协商缓存是我们通过 http 响应头字段 etag 或者 Last-Modified 等判断服务器上资源是否修改,如果修改则从服务器重新获取,如果未修改则 304 指向浏览器缓存中进行获取
GET 和 POST 请求的区别
- GET请求参数通过URL传递,而POST放在body上(重点)
- GET请求在URL中传递的参数是有长度限制的(不固定,因浏览器决定),而POST没有限制(重点)
-
- GET请求比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感数据
- GET请求会被浏览器主动缓存,而POST不会(重点)
- GET请求在浏览器回退时是无害的,POST会再次提交请求(重点)
HTTP 状态码
- 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态码
- 2xx(成功)表示成功处理了请求的状态码
- 3xx(重定向)表示要完成请求,需要进一步操作;通常,这些状态代码用来重定向
- 4xx(请求错误)这些状态码表示请求可能出错,妨碍了服务器的处理
- 5xx(服务器错误)这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错