计算机基础---从输入 URL 到页面展示到底发生了什么?

从输入 URL 到页面展示到底发生了什么?

基础版本:

  1. 在浏览器中输入指定网页的 URL。
  2. 浏览器通过 DNS 协议,获取域名对应的 IP 地址。 [[八股文复习(总)#DNS 解析的过程是什么样的?]]
  3. 浏览器根据 IP 地址和端口号,向目标服务器发起一个 TCP 连接请求。[[#建立连接-TCP 三次握手]]
  4. 浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容。
  5. 服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器。
  6. 浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。
  7. 浏览器在不需要和服务器通信时,可以主动关闭 TCP 连接,或者等待服务器的关闭请求。 [[#断开连接-TCP 四次挥手]]

详细版本:

1、在浏览器地址栏输⼊URL

2、浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤

  • 如果资源未缓存,发起新请求

  • 如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进⾏验证。

  • 检验新鲜通常有两个HTTP头进⾏控制 Expires 和 Cache-Control:

  • HTTP1.0提供 Expires,值为⼀个绝对时间表示缓存新鲜⽇期

  • HTTP1.1增加了Cache-Control: max-age=time,值为以秒为单位的最⼤新鲜时间

3、浏览器解析URL获取协议,主机,端口,path

4、浏览器组装⼀个HTTP(GET)请求报文

5、浏览器获取主机 ip 地址,过程如下:

  1. 浏览器缓存
  2. 本机缓存
  3. hosts文件
  4. 路由器缓存
  5. ISP DNS缓存
  6. DNS递归查询(可能存在负载均衡导致每次IP不⼀样)

6、打开⼀个socket与目标IP地址,端口建立TCP链接,三次握手如下:

  1. 客户端发送⼀个TCP的SYN=1,Seq=X的包到服务器端口
  2. 服务器发回SYN=1, ACK=X+1, Seq=Y的响应包
  3. 客户端发送ACK=Y+1, Seq=Z

7、TCP链接建⽴后发送HTTP请求

8、处理程序读取完整请求并准备HTTP响应,可能需要查询数据库等操作

9、服务器将响应报文通过TCP连接发送回浏览器

10、浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示

11、浏览器渲染完界面,然后根据情况选择关闭TCP连接或者保留重用,关闭TCP连接的四次握⼿如下:

  1. 主动方发送Fin=1, Ack=Z, Seq= X报⽂
  2. 被动方发送ACK=X+1, Seq=Z报⽂
  3. 被动方发送Fin=1, ACK=X, Seq=Y报⽂
  4. 主动方发送ACK=Y, Seq=X报⽂

用户打开一个网页的过程,都用了什么协议

  1. DNS 协议(域名系统协议)
  • 当用户在浏览器中输入网址(如www.example.com)时,首先会使用 DNS 协议。浏览器会向本地 DNS 服务器发送请求,查询域名对应的 IP 地址。如果本地 DNS 服务器没有缓存该域名的 IP 地址,它会向上级 DNS 服务器递归查询,直到查询到目标 IP 地址或者查询失败。
  1. TCP 协议(传输控制协议)
  • HTTP/HTTPS 协议都是基于 TCP 协议来传输数据的。TCP 协议提供可靠的、面向连接的字节流服务。
  • 在建立连接时,会进行三次握手过程。客户端向服务器发送一个 SYN(同步)包,服务器收到后回复一个 SYN + ACK(同步 + 确认)包,客户端再回复一个 ACK 包,这样就建立了一个 TCP 连接。
  • 在数据传输过程中,TCP 协议会对数据进行分段、编号、确认、重传等操作,以确保数据的可靠传输。
  • 当数据传输完成后,会进行四次挥手过程来关闭连接。
  1. HTTP/HTTPS 协议(超文本传输协议 / 安全的超文本传输协议)
  • HTTP 协议
  • 一旦获取到目标服务器的 IP 地址,浏览器会根据网页的类型使用 HTTP 协议(对于普通网页)或者 HTTPS 协议(对于加密的安全网页,如涉及用户登录、交易等敏感信息的网页)向目标服务器发送请求。
  • HTTP 请求包含请求方法(如 GET、POST 等)、请求头(包含诸如 User - Agent、Accept 等信息,用于告诉服务器客户端的一些特性和需求)和请求体(对于 POST 等请求方法,包含要发送到服务器的数据)。
  • 服务器接收到请求后,根据请求内容查找相应的资源(如 HTML 文件、图片、脚本等),并构建 HTTP 响应。响应包含状态码(如 200 表示成功,404 表示未找到资源等)、响应头(包含诸如 Content - Type 等信息,用于告诉浏览器响应内容的类型等)和响应体(包含实际的网页内容或者错误信息等)。
  • HTTPS 协议
  • 在 HTTPS 中,在 HTTP 协议的基础上增加了 SSL/TLS 加密层。在建立连接时,浏览器和服务器会进行 SSL/TLS 握手过程。
  • 这个过程中,服务器会向浏览器发送数字证书(包含服务器的公钥等信息),浏览器验证证书的有效性(检查证书的颁发机构、有效期、是否被吊销等)。如果证书有效,浏览器会生成一个随机的对称密钥,用服务器的公钥加密后发送给服务器。
  • 之后,双方就可以使用这个对称密钥对 HTTP 通信进行加密和解密,确保数据传输的安全性。
  1. IP 协议(网际协议)
  • TCP 协议的数据单元(段)会被封装到 IP 数据报中进行传输。IP 协议负责将数据报从源主机路由到目标主机,通过 IP 地址来确定数据报的传输路径。
  • 在网络中,路由器根据 IP 数据报中的目的 IP 地址,查询路由表,选择合适的下一跳路径,将数据报转发到目标主机所在的网络。

你可能感兴趣的:(java)