1.用户输入URL
首先,用户输入URL(统一资源定位符):https://www.baidu.com
https
: 协议名
www
: 在配置域名解析的时候,这叫主机记录
baidu.com
: 域名
说道这里,可能有小伙伴不知道网址-域名-服务器这几个家伙的关系!
2、DNS解析
上一步,游览器拿到了URL,接着游览器需要知道具体的ip
地址,这时候就需要DNS解析服务来告诉它了,你可能会问,那我们干嘛不干脆输IP
地址呢?
- IP地址是
192.168.0.1
这类数字,相比baidu.com
等语义化不利于记忆 - 你也可以直接输入IP地址,但是如果你的服务部署在阿里云,阿里云会视访问为恶意攻击而触发警报
DNS是什么呢?
DNS(Domian Name System),网域名称系统
,我们配置域名解析的过程,其实就是在互联网上建立一个域名
和IP地址
的映射关系(一个分布式数据库
),当然具体的操作是你的域名提供商帮你做了。
解析过程
- 游览器从缓存中查找DNS记录(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存,chrome查看办法:net-internals/#dns)
- 如果没找到,则到操作系统的DNS缓存(Windows系统可以在命令行下使用 ipconfig /displaydns查看 )中查找
- 如果没找到,则到hosts文件(位于C:\Windows\System32\drivers\etc)中查找
- 如果没找到,游览器发起DNS的系统调用,接着向本地配置的DNS服务器(360可以配置,反正它说自己的好,-,-)发起域名解析请求
-
接下来的过程,嘴炮不如上图
3、发起TCP三次握手
拿到服务器IP后,游览器会以一个随机端口(1024 < port < 65535)向服务器的80端口(第一张图域名解析中,可以看到没有配置服务器端口,默认的)发起TCP连接请求。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接
。
大白话模式
client : 嘿,服务器大哥,咱们唠唠嗑吧
server:好,我听着呢,你唠吧
client : 那你听好啦,我要唠了!
4、发起HTTP请求
这个时候,有个需要注意的点,很多人也奇怪的东西,为什么我的请求前面有个类型为option的请求
,这个是复杂请求
和简单请求
的区别,叫预检请求(PreFlight)
,详情:阮一峰:跨域资源共享 CORS 详解
http请求成功后,服务器把html发送给游览器,碰到link
和script
标签后,渲染暂停,等待下载完成(阻塞式),所以性能优化中有一点就是把必要的css和script放在head标签内,其他的比如点击事件,定时器,放在下面(onload就是这个作用)
后面还有几个大点,后续更新:
1、游览器渲染原理(dom树,渲染树,回流,重绘)
2、浏览器渲染阻塞与优化