本文共 887 字,大约阅读时间需要 2 分钟。
本文转自:https://blog.csdn.net/Atalanta1/article/details/90550675
这是这两天面试的时候的一道面试题,当时答得不好,现在总结了一下。
一次完整的 http 请求包括一下几个步骤【这仅是个人的理解】
DNS解析--->TCP 连接--->浏览器发送http请求--->服务器响应请求--->浏览器解析html文件--->浏览器布局渲染
1.DNS域名解析。
(1) 首先会在浏览器DNS缓存中搜索是否有对应的IP映射(并且是有效的),如果找到的话,就调用该映射并且停止解析;如果没找到的话就执行第二步;
(2)在操作系统DNS缓存中查找是否有对应的IP,如果有的就停止解析,否则就执行第三步;
(3)查找本地系统 hosts 文件,在hosts文件中查找是否有对应的IP,如果有的话就停止解析,否则就向本地配置首选的DNS服务器发起域名解析的请求。
2.TCP连接。
TCP通过三次握手创建连接【保证数据传输的可靠性】,具体说一下三次握手的过程(此处就不细说了)。
3.客户端的浏览器向服务器发起http请求。【请求报文包括请求行、请求报头、空行、正文】在此不再详述
4.服务器对浏览器发过来的请求作以响应。【报文中 包括状态行、响应头部、空行、响应正文】在此也不详述(在这里常见的状态码要记住)
5.浏览器对HTML进行解析
客户端的浏览器收到服务器的响应之后就按照顺序一个一个地对HTML文件进行解析,构建DOM树,当解析到外部资源文件CSS或JS文件时,会对服务器发送请求,下载资源文件,如果下载的是CSS文件,浏览器会一边下载CSS文件,一边对后面的html文件进行解析,并且构建DOM树,如果下载的是JS文件,那么浏览器就停止对后面html文件的解析,此时就会出现JS页面阻塞的问题。
6.浏览器布局进行布局和渲染。
参考:
HTTP请求报文和响应报文的格式:
TCP三次握手的过程详述:
参考:https://blog.csdn.net/allenjay11/article/details/51788026