目录
1. 浏览器根据域名解析IP地址
首先搜索浏览器自身的DNS缓存,看是否是有域名对应的条目,且没有过期,如果有且没有过期则解析到此结束,否则进行下一步。
浏览器搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束,否则进行下一步。
向路由器发送查询请求,没有则继续下一步。
最后要查的是ISP缓存DNS的服务器。
2. 浏览器与WEB服务器建立TCP连接
TCP的3次握手。
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
第一次握手:Client 什么都不能确认;Server 确认了对方发送正常。
第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常,对方发送正常。
第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送接收正常。
所以三次握手就能确认双发收发功能都正常,缺一不可。
3. 浏览器给WEB服务器发送一个HTTP请求
一个HTTP请求报文由请求行(request line)、请求头(headers)、空行(blank line)和请求数据(request body)4个部分组成。
3.1. 请求行
请求行分为三个部分:请求方法、请求地址URL和HTTP协议版本,它们之间用空格分割。
例如,GET /index.html HTTP/1.1。
3.2. 请求头
请求头部为请求报文添加了一些附加信息,由键值对组成,每行一对,键和值之间使用冒号分隔。
3.3. 请求数据
请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最长使用的请求头部是Cntent-Type和Content-Length。
4. 服务器端响应HTTP请求,浏览器得到HTML代码
HTTP响应报文由状态行(status line)、响应头(headers)、空行(blank line)和响应数据(response body)4个部分组成
4.1. 状态行
状态行由3部分组成,分别为:协议版本、状态码、状态码扫描。其中协议版本与请求报文一致,状态码描述是对状态码的简单描述。
4.2. 响应头
4.3. 响应数据
用于存放需要返回给客户端的数据信息。
5. 浏览器解析HTML代码,并请求HTML代码中的资源
浏览器拿到HTML文件后,开始解析HTML代码,遇到静态资源时,就向服务器端去请求下载。
6. 关闭TCP连接,浏览器对页面进行渲染呈现给用户
浏览器利用自己内部的工作机制,把请求到的静态资源和HTML代码进行渲染,呈现给用户。
四次挥手:
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。