一次面试,竟然提到HTTP的请求过程,从浏览器到服务端,到底是怎么样的一个执行过程,今天在此梳理一下!
HTTP其实就是一个客户端与服务器之间的一种通信协议,http客户端发起请求,就会在服务端创建一个端口,而http服务器就在端口监听客户端的请求,HTTP服务器返回状态和内容。
http整体执行流程如下(以chrome为例):
1 输入网址
2 域名解析
2.2 搜索操作系统自身的DNS缓存(浏览器没有找到缓存或者缓存已经失效,则跳转到第2.3步)
2.3 读取本地的host文件
2.4 浏览器发起一个DNS的系统调用(本地主控DNS服务器:宽带运营商服务器查看本身缓存)
2.5 运营商服务器发起一个迭代DNS解析的请求
运营商服务器得到结果返回给操作系统内核
操作系统内核返回给浏览器并缓存
浏览器最终拿到了域名对应的ip地址
3 浏览器获得域名对应的IP地址后,浏览器与服务器的web程序TCP连接,发起著名的HTTP“三次握手”。下图是TCP连接需要经过的一些过程:
TCP连接请求1.png
TCP连接请求2.png
TCP连接请求3.png
TCP/IP协议栈.png
防火墙.png
TCP连接请求会经历层层的路由,防火墙,最后到达网卡,然后到达内核的TCP/IP协议栈,还有可能经过防火墙的过滤,最终到达web服务端。接下来就要经历经典的TCP“三次握手”
4 发送http请求
TCP/IP连接建立起来后,浏览器就可以向服务器发送HTTP请求了,比如,使用了HTTP的GET方法请求一个根域名里的一个域名等等。
5 服务器处理请求,并将结果返回给浏览器
6 浏览器根据返回结果进行处理或页面渲染