从浏览器输出URL到页面加载的具体流程(http协定)
- 域名解析
- 建设TCP连贯
- 浏览器发送HTTP申请
- 服务器解决申请并返回HTTP报文
- 浏览器解析渲染页面
- 连贯完结
1.域名解析
域名在解析的过程中会有多级缓存,首先浏览器会查找本身缓存中是否存在对应的ip信息,若没有则会进一步向操作系统的缓存要,还没有的话,则会查看本机的域名解析文件hosts,看是否存在对应的域名 - ip配置信息。
如果通过以上步骤依然无奈获取域名对应的ip地址,则会被动向DNS服务器发动申请,获取IP地址。
DNS 域名零碎(Domain Name System)是互联网的一项服务。它作为将域名和IP地址互相映射的一个分布式数据库,可能使人更不便地拜访互联网。
以查问 zh.wikipedia.org 为例:
- 客户端发送查问报文"query zh.wikipedia.org"至DNS服务器,DNS服务器首先查看本身缓存,如果存在记录则间接返回后果。
- 如果记录老化或不存在,则:
DNS服务器向根域名服务器发送查问报文"query zh.wikipedia.org",根域名服务器返回顶级域 .org 的顶级域名服务器地址。 - DNS服务器向 .org 域的顶级域名服务器发送查问报文"query zh.wikipedia.org",失去二级域 .wikipedia.org 的权威域名服务器地址。
- DNS服务器向 .wikipedia.org 域的权威域名服务器发送查问报文"query zh.wikipedia.org",失去主机 zh 的A记录,存入本身缓存并返回给客户端。
2.建设TCP连贯
HTTP协定是在TCP/IP协定的根底上运行的,依附TCP/IP协定进行牢靠的数据传输,因而浏览器在发送申请前,须要先建设TCP连贯。
建设TCP连贯流程(三次握手):
- 客户端(通过执行connect函数)向服务器端发送一个SYN包,申请一个被动关上。该包携带客户端为这个连贯申请而设定的随机数A作为音讯序列号。
- 服务器端收到一个非法的SYN包后,把该包放入SYN队列中;回送一个SYN/ACK。ACK的确认码应为A+1,SYN/ACK包自身携带一个随机产生的序号B。
- 客户端收到SYN/ACK包后,发送一个ACK包,该包的序号被设定为A+1,而ACK的确认码则为B+1。而后客户端的connect函数胜利返回。当服务器端收到这个ACK包的时候,把申请帧从SYN队列中移出,放至ACCEPT队列中;这时accept函数如果处于阻塞状态,能够被唤醒,从ACCEPT队列中取出ACK包,从新创立一个新的用于双向通信的sockfd,并返回。
3.浏览器发送HTTP申请
TCP连贯构建胜利后,浏览器依据HTTP协定规定的格局,构建HTTP申请报文并通过TCP协定发送到服务器指定端口,申请报文由三局部组成:申请行、申请报头和申请注释。
- 申请行:形容申请或响应的根本信息。
- 头部字段汇合:应用 key-value 模式更具体地阐明报文。
- 音讯注释:理论传输的数据,它不肯定是纯文本,能够是图片、视频等二进制数据。
4.服务器解决申请并返回HTTP报文
HTTP响应报文由三局部组成:
- 状态行:版本号、状态码、起因。
- 响应头部字段:应用 key-value 模式更具体地阐明报文。
- 响应注释:服务器发送给浏览器的内容。
5.浏览器解析渲染页面
简要流程:
- HTML解析与DOM树构建
- CSS解析
- 渲染
6.连贯完结
TCP四次挥手,完结连贯。