一、URL输入
- 输入URL
URL,全称叫做统一资源定位符,用于定位互联网上的资源,俗称网址。
-
浏览器检查输入的内容是否是一个合法的URL连接
-
- 合法:判断输入的URL是否完整。如果不完整,浏览器会对地址进行猜测,补全地址的前缀或者后缀。
- 不合法:将输入内容作为搜索条件,使用用户设置的默认搜索引擎进行搜索。(现在大部分浏览器都会从历史记录、书签等地方开始查找我们输入的网址,并给出智能提示)
-
浏览器对用户输入的URL (网址) 进行解析,确定了web服务器和文件名
二、DNS解析
因为浏览器不能直接通过域名找到对应的服务器IP地址,所以需要进行DNS解析,查找到对应的IP地址进行访问。
用户在浏览器输入域名,操作系统会检查浏览器缓存和本地的 hosts 文件中,是否有这个网址记录
- 如果本地有的话就从记录中找到对应的 IP 地址,完成域名解析。
- 如果本地没有的话,使用TCP/IP参数中设置的DNS服务器进行查询,如果查询的域名包含在本地配置区域资源中,则返回解析结果,完成域名解析
- 如果本地配置区域资源中还是没有,则检查本地DNS服务器是否缓存有该网址记录,有的话就返回解析结果,完成域名解析
- 如果以上三个地方都没有的话,本地DNS服务器就会发送查询报文到根DNS服务器,根DNS服务器收到请求后,返沪顶级域DNS服务器地址,本地收到顶级域DNS服务器后,再发送查询报文到顶级域DNS服务器,顶级域DNS服务器收到请求后,返回权威DNS服务器地址,然后本地DNS服务器再发送查询报文到权威DNS服务器,权威DNS服务器收到请求后,返回最终的 IP 地址,完成域名解析。
三、建立TCP连接
- 当浏览器获取到服务器IP地址后,浏览器会用一个随机的端口号向服务器80端口发起TCP连接请求。这个连接请求到达服务器段后,通过TCP三次握手,建立TCP连接。建立连接后就可以通过HTTP进行数据传输了。
- 如果使用HTTPS,会在TCP域HTTP之间添加一层协议做为加密及认证的服务。HTTPS使用 SSL 和 TLS 协议,保障了信息的安全。
- SSL 协议的作用:认证客户端和服务器,确保数据发送到正确的客户端和服务器。加密数据防止数据中途被窃取,维护数据完整性,确保数据再传输过程中不被改变。
- TLS协议的作用:用于再两个通信应用程序之间提供保密性和数据完整性。TLS协议由两层组成:TLS记录协议,和TLS握手协议。
四、发送HTTP/HTTPS请求
- 当浏览器到 web 服务器的连接建立后,浏览器会发送一个初始的 HTTP GET 请求,请求目标通常是一个 HTML 文件。
- 浏览器能解析解析网址并生成HTTP消息,但是其本身不具备将消息发送到网络中的功能,因此需要浏览器委托操作系统向web服务器发送请求
五、服务器响应请求
服务器收到请求后,将发回一个 HTTP 响应报文,内容包括相关响应头和 HTML 正文。当浏览器收到服务器响应后,开始解析并渲染页面。
常见状态码描述及说明:
常见状态代码 | 状态描述 | 说明 |
---|---|---|
200 | OK | 客户端请求成功 |
204 | No Content | 请求处理成功,但没有任何资源可以返回给客户端 |
206 | Partial Content | 对资源某一部分的请求 |
301 | Moved Permanently | 资源的URI 已更新,永久性重定向,请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。 |
302 | Found | 资源的URI已临时定位到其他位置, 临时性重定向 |
303 | See Other | 资源的URI已更新,你是否能临时按新的URI访问, 该状态码表示由于请求对应的资源存在着另一个URL,应使用GET方法定向获取请求的资源 |
304 | Not Modified | 资源已找到,但未符合条件请求 |
307 | Temporary Redirect | 临时重定向,与302有相同的含义 |
400 | Bad Request | 客户端请求有语法错误,不能被服务器所理解 |
401 | Unauthorized | 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 |
403 | Forbidden | 服务器收到请求,但是拒绝提供服务 |
404 | Not Found | 请求资源不存在,eg:输入了错误的URL |
500 | Internal Server Error | 服务器发生不可预期的错误,貌似内部资源出故障了 |
503 | Server Unavailable | 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
六、浏览器解析渲染页面
不同的浏览器引擎渲染过程都不太一样,我以谷歌浏览器为例来介绍一下渲染过程:
- 首先,处理 HTML 标记并构建DOM 树
- 第二步,处理 CSS 标记并构建 CSSOM 树。
- 第三步,将 DOM 树与 CSSOM 树合并成一个渲染树。
- 第四步,根据渲染树来布局,以计算每个节点的几何信息。
- 第五步,将各个节点渲染到屏幕上。这样就完成了页面的渲染。
七、HTTP请求结束,断开TCP连接
- 渲染完成之后就可以断开 TCP 连接了
- 但是现在的浏览器页面为了优化请求的耗时,默认都会开启持久连接,也就是说,标签页关闭的时候 TCP 连接才会关闭,这个关闭的过程就是四次挥手。
八、总结
URL访问网站时的网络传输全过程:
- 首先url输入,然后通过域名找到IP,先从本地hosts文件中查找,如果本地和指定DNS服务器中的缓存都没有的话, 就要请求DNS服务器从根域开始查询;得到 IP 后开始与目的主机进行三次握手来建立TCP连接;连接建立后进行HTTP访问,传输并获取网页内容;传输完后与目的主机四次挥手来断开TCP连接。