【一】从浏览器输入一个地址到看到页面信息的过程
【1】在浏览器中输入网址(URL)
-
用户在浏览器的地址栏中输入目标网址(例如:百度一下,你就知道)
【2】DNS解析
-
浏览器会先检查是否有缓存过该域名的IP地址,如果有缓存则直接使用,否则浏览器会向本机的DNS缓存查找域名对应的IP地址。
-
如果找不到,则浏览器会向递归解析服务器发送DNS查询请求。
-
这个过程中可能包括本地Hosts文件的解析、本地DNS缓存的查询以及顶级域名服务器(Root DNS Server),依次通过多级的DNS服务器逐步解析出目标域名的IP地址。
【3】建立TCP连接
-
浏览器使用获取到的IP地址和默认的端口号(通常是80)与目标服务器建立TCP连接。
-
这个过程涉及到TCP/IP的三次握手,确保客户端和服务器之间建立稳定可靠的连接。
【4】发送HTTP请求
-
一旦TCP连接建立成功,浏览器
-
会发送一个HTTP请求给目标服务器。
-
该请求会包含一些重要信息,例如请求方法(GET、POST等)、请求头(User-Agent、Cookies等)和请求体(如果有数据需要上传)。
【5】服务器处理请求
-
目标服务器接收到浏览器发送的HTTP请求后,会根据请求的内容进行相应的处理。
-
这个过程会涉及到后端服务的运行,例如使用Nginx作为反向代理服务器将请求转发给后端Web框架(如Django、Flask等)
【6】服务器发生HTTP响应
-
服务器处理完请求后,会生成一个HTTP响应,该响应包括状态码、响应头和响应体。
-
状态码表示服务器对请求的处理结果,响应头包含了一些元信息,而响应体包含了请求的实际内容。服务器将该HTTP响应发送回客户端浏览器。
【7】接收并渲染页面
-
浏览器接收到服务器发送的HTTP响应后,会根据响应的内容进行解析和渲染。
-
浏览器会根据Content-Type等响应头信息确定如何展示内容,如果内容是HTML页面,则浏览器会解析HTML标记、加载外部样式表和脚本文件,并将页面渲染出来。
【8】断开TCP连接
-
页面渲染完成后,如果没有keep-alive机制或者WebSocket等长连接技术,浏览器会发送一个关闭TCP连接的请求给服务器,进而两者断开连接。
-
需要注意的是,上述过程中还涉及到重定向、HTTPS安全连接以及其他一些特殊情况的处理,但基本的流程如上所述。
-
此外,还有一些细节可以进一步扩展和讨论,例如HTTP/2、HTTP/3等协议的特点及优化。