博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP请求过程以及优化
阅读量:7174 次
发布时间:2019-06-29

本文共 764 字,大约阅读时间需要 2 分钟。

http请求过程

正常普通流程:

  1. 域名解析
  2. 建立连接,TCP三次握手
  3. 发送请求(第三次握手发出去的同时)
  4. 解析html,构建dom树,css树,生成渲染树,显示页面。

一些细节

  1. 域名解析即寻找ip,通过查询dns服务器,流程:浏览器dns缓存(chrome://net-internals/#dns),本机dns缓存,HOSTS,若仍没有,则去请求系统配置的DNS服务器,如有缓存,则返回,还没有,则向根域服务器发出请求,跟域名反向查找,即根据域名顶级域名(如com,cn),二级域名,三级域名依次来回ip查询,直到返回并依次缓存记录。
  2. 三次握手有客户端发出,并且不需要等待第三次请求的结果。
  3. 一次完整的连接后,一般设置connection: keep-alive保持一定时间内可以持续连接(实现长连接)
  4. 解析html,从头到尾解析,构建dom树,如果遇到link css,则异步请求,不影响dom形成,但阻塞css树形成,遇到正常的script(async, defer未设置异步),则中断dom树形成,直到js加载完成并运行结束(因为js可能改变dom结构)

针对的优化

  1. cdn的使用,cdn的原理在于根据CNAME去获取CDN的服务器,并根据请求ip地区运营商,内容分发,负载情况,提供最近节点的cdn缓存服务器,cdn缓存服务器再去请求所需资源,同时返回客户端并本地进行缓存。
  2. 预加载的使用,比如preconnect, prefetch, preload的使用
  3. js放在dom树最后(避免多次重排),css样式放在顶部(避免页面多次渲染),图片设置好大小(占位,否则又要重排),请求资源合并,减少请求数量,利用缓存。

转载于:https://juejin.im/post/5bc1950a6fb9a05d2c43d273

你可能感兴趣的文章
AngularJS中实现Model缓存
查看>>
【学习Android NDK开发】Android.mk文件
查看>>
Windows CE嵌入式系统程序开发
查看>>
建立一个使用.Net 2.0 MemberShip功能的标准例程(一)引子+预告 —— 这回不挖大坑了 保证填满...
查看>>
Winform 三层架构例子(3)--利用资源文件实现多国语言(含源代码)
查看>>
一起谈.NET技术,Linq To SQL 批量更新方法汇总
查看>>
一起谈.NET技术,走向ASP.NET架构设计——第五章:业务层模式,原则,实践(后篇)...
查看>>
PCI DSS 2.0标准出炉 未涉及移动支付技术
查看>>
分享Silverlight/WPF/Windows Phone一周学习导读(11月14日-11月20日)
查看>>
XAML实例教程系列 - 标记扩展(Markup Extensions)
查看>>
osg场景图(DAG-有向无环图)
查看>>
自绘控件的4种方法
查看>>
用HTML5实现手机摇一摇的功能
查看>>
linux-vim -ctags-Tlist-winmanager [转]
查看>>
黄聪:C#超级延时方法,延迟系统时间但系统又能同时能执行其它任务
查看>>
嵌入式 H264中的SPS、PPS提取与作用
查看>>
NodeJs+http+fs+request+cheerio 采集,保存数据,并在网页上展示(构建web服务器)
查看>>
js 定位到某个锚点
查看>>
FFMPEG视音频编解码零基础学习方法-b
查看>>
me909e-821 拨号流程
查看>>