一次HTTP请求的全部流程
2020-11-04 14:23:39 0 举报
一起HTTP请求的非常完整的整体流程 (暂无服务器内核处理流程)
作者其他创作
大纲/内容
windows查找系统hosts 文件linux查找/etc/hosts 文件
建立TCP连接后发起http请求
服务器响应客户端阶段
DNS解析阶段
服务器端响应http请求浏览器得到html代码
服务器内核处理
进过TCP3次握手之后,浏览器发起了HTTP请求(具体看HTTP请求包体)起始部分:GET / HTTP/1.0 (请求的方法 请求的URL 请求所使用的协议) Header头部分:Accept: MIMEAccept-Encoding: gzipAccept-Language: zh-CNCache-Control: no-cacheConnection: keep-aliveHost: localhostPragma: no-cacheUser-Agent: Mozilla/5.0 Body主体部分:可能没有,根据请求方式决定
浏览器拿到index.html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但是由于每个资源大小不一样,而浏览器又多线程请求请求资源,所以从下图看出,这里显示的顺序并不一定是代码里面的顺序。 浏览器在请求静态资源时(在未过期的情况下),向服务器端发起一个http请求(询问自从上一次修改时间到现在有没有对资源进行修改),如果服务器端返回304状态码(告诉浏览器服务器端没有修改),那么浏览器会直接读取本地的该资源的缓存文件。最后,浏览器利用自己内部的工作机制(具体看浏览器内核解析流程),把请求到的静态资源和html代码进行渲染,渲染之后呈现给用户。
HTTP请求阶段
TCP三次握手建立链接
查找浏览器自身DNS缓存 chrome://net-internals/#dns
浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器
查找系统自身的DNS缓存
浏览器解析渲染阶段
一次HTTP请求的全部流程
浏览器输入:http://www.baidu.com
浏览器解析html代码,并请求html代码中的资源
IP+Socket链接阶段
WEB应用程序处理
备注: 只是整体请求流程,还没涉及到服务器操作系统内部(内存、磁盘、CPU、进程、线程)的处理流程
0 条评论
下一页