从浏览器输入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.浏览器解析渲染页面
简要流程:操作系统
6.链接结束
TCP四次挥手,结束链接。视频