在浏览器中输入一个URL并按下回车键后,会发生一系列复杂且有条不紊的步骤,从请求服务器到最终页面展示在你的屏幕上。这个过程可以分为以下几个关键步骤:

  1. URL 解析
  2. DNS 查询
  3. TCP 连接
  4. 发送 HTTP 请求
  5. 服务器处理请求
  6. 接收 HTTP 响应
  7. 浏览器渲染页面

1. URL 解析(示例)

URL(Uniform Resource Locator)是一种统一资源定位符,它包含了访问资源所需的所有信息。一个典型的URL格式如下:

http://www.example.com:80/path/to/resource?query=param#fragment

解析过程中,浏览器会将URL拆分为多个部分:

  • 协议(Scheme):如httphttps
  • 主机(Host):如www.example.com
  • 端口(Port):默认为80(HTTP)或443(HTTPS),如果没有显式指定,浏览器会使用默认端口。
  • 路径(Path):服务器上的资源路径。
  • 查询参数(Query Parameters):以?开头的参数部分。
  • 片段标识符(Fragment Identifier):以#开头的部分,指向页面内的某个位置。

2. DNS 查询

浏览器需要将URL中的主机名转换为IP地址,这个过程通过DNS(Domain Name System)来完成。DNS 查询的步骤包括:

  • 浏览器首先检查本地缓存中是否有该域名的IP地址。
  • 如果没有,浏览器会向本地DNS服务器发送查询请求。
  • 本地DNS服务器会递归查询其他DNS服务器,直到找到对应的IP地址并返回给浏览器。

3. TCP 连接

得到了IP地址后,浏览器需要与服务器建立连接。这个过程使用TCP(Transmission Control Protocol)完成。TCP连接的过程包括三次握手:

  1. 客户端发送SYN(同步)包:请求建立连接。
  2. 服务器返回SYN-ACK(同步-确认)包:同意建立连接。
  3. 客户端发送ACK(确认)包:确认连接建立。

4. 发送 HTTP 请求

TCP连接建立后,浏览器会发送一个HTTP请求。一个典型的HTTP请求包括以下部分:

  • 请求行(Request Line):包含请求方法(如GET或POST)、请求的URL路径和HTTP版本。
  • 请求头(Headers):包含客户端信息、期望的响应格式等。
  • 请求体(Body):POST请求时可能包含提交的数据。

5. 服务器处理请求

服务器接收到HTTP请求后,会进行处理:

  • 解析请求:服务器解析请求行和请求头,提取所需信息。
  • 路由请求:根据请求路径和方法,将请求路由到对应的处理程序。
  • 生成响应:处理程序处理请求后生成HTTP响应,包括响应行、响应头和响应体。

6. 接收 HTTP 响应

浏览器接收到服务器的HTTP响应后,会进行解析:

  • 解析响应行:确定HTTP状态码(如200表示成功,404表示资源未找到)。
  • 解析响应头:提取响应的元数据,如内容类型、内容长度等。
  • 解析响应体:获取实际的数据内容(如HTML、CSS、JavaScript)。

7. 浏览器渲染页面

浏览器解析并渲染HTML内容的过程包括以下步骤:

  • 构建DOM树:解析HTML文档并构建DOM(文档对象模型)树。
  • 构建CSSOM树:解析CSS文件并构建CSSOM(CSS对象模型)树。
  • 执行JavaScript:如果HTML中包含JavaScript文件,浏览器会下载并执行它们。
  • 构建渲染树:将DOM树和CSSOM树结合,构建渲染树。
  • 布局和绘制:根据渲染树进行布局计算,将元素的位置和大小确定后进行绘制,将页面内容显示在屏幕上。

这篇博客可以作为面试八股,拱大家使用

从输入URL到页面展示到底发生了什么?--01的更多相关文章

  1. 【原】老生常谈-从输入url到页面展示到底发生了什么

    刚开始写这篇文章还是挺纠结的,因为网上搜索“从输入url到页面展示到底发生了什么”,你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么,不过当面试官一步步 ...

  2. 【转】老生常谈-从输入url到页面展示到底发生了什么

    今天看到了一篇很详细地解释了从输入url到页面展示过程的文章,好文章不能错过,所以转到自己这里来了. 原文地址:老生常谈-从输入url到页面展示到底发生了什么 以下为原文: 刚开始写这篇文章还是挺纠结 ...

  3. (转)老生常谈-从输入url到页面展示到底发生了什么

    刚开始写这篇文章还是挺纠结的,因为网上搜索"从输入url到页面展示到底发生了什么",你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么 ...

  4. 转载--从输入URL到页面展示到底发生了什么

    最近我也在看http协议, tcp相关知识, 在吃饭时无意看到来一篇文章讲解“从输入URL到页面展示到底发生了什么”, 细细看完, 很值得回味, 所以转载, 以供日后在温习. (PS, 作者这篇文章发 ...

  5. 从输入url到页面展示到底发生了什么

    阅读目录 1.输入地址 2.浏览器查找域名的 IP 地址 3.浏览器向 web 服务器发送一个 HTTP 请求 4.服务器的永久重定向响应 5.浏览器跟踪重定向地址 6.服务器处理请求 7.服务器返回 ...

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

    1.输入地址 当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全ur ...

  7. 老生常谈-从输入url到页面展示到底发生了什么

    来自:咸鱼老弟 - 博客园 链接:http://www.cnblogs.com/xianyulaodi/p/6547807.html

  8. 从输入url到页面返回到底发生了什么

    1. 前言 Google应该是开发者平日里用得最多的网站之一,今早笔者在浏览器地址栏里键入www.google.com的时候,突然想了解下这背后的网络通信过程究竟是怎么样的.毕竟自己也算是一名Web开 ...

  9. 从输入 URL 到页面展示,到底发生了什么

    从输入 URL 到页面展示,到底发生了什么 1.输入URL 当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应 ...

  10. 《浏览器工作原理与实践》<04>从输入URL到页面展示,这中间发生了什么?

    “在浏览器里,从输入 URL 到页面展示,这中间发生了什么? ”这是一道经典的面试题,能比较全面地考察应聘者知识的掌握程度,其中涉及到了网络.操作系统.Web 等一系列的知识. 在面试应聘者时也必问这 ...

随机推荐

  1. IceRPC之调度管道->快乐的RPC

    作者引言 很高兴啊,我们来到了IceRPC之调度管道->快乐的RPC, 基础引导,有点小压力,打好基础,才能让自已不在迷茫,快乐的畅游世界. 调度管道 Dispatch pipeline 了解如 ...

  2. 部署springboot+vue项目文档(若依ruoyi项目部署步骤)

    摘自:https://blog.csdn.net/Dreamboy_w/article/details/104389797 部署springboot+vue项目文档(若依ruoyi项目部署步骤)一:部 ...

  3. aspnet core运行后台服务任务

    之前在公司的一个项目中需要用到定时程序,当时使用的是aspnet core提供的IHostedService接口来实现后台定时程序,具体的示例可去官网查看.现在的dotnet core中默认封装了实现 ...

  4. oidc-client.js踩坑吐槽贴

    前言 前面选用了IdentityServer4做为认证授权的基础框架,感兴趣的可以看上篇<微服务下认证授权框架的探讨>,已经初步完成了authorization-code与implicit ...

  5. Windows程序读取不了中文路径问题

    问题描述 今天调试发现win32接口GetFileAttributesW居然不支持中文路径,于是寻找解决方案,找了半天,尝试用boost的fileystem库发现能用,而且boost能跨平台! 不支持 ...

  6. node写接受

    选择数据库类型:mongodb 定义用户集合的字段(域): 用户名  密码  性别  爱好(多选)  简介 npm i -S express mongoose 在项目中连接mongodb服务 inde ...

  7. C#异步编程是怎么回事(番外)

    在上一篇通信协议碰到了多线程,阻塞.非阻塞.锁.信号量...,会碰到很多问题.因此我感觉很有必要研究多线程与异步编程. 首先以一个例子开始 我说明一下这个例子. 这是一个演示异步编程的例子. 输入jo ...

  8. Grafana 开源了一款 eBPF 采集器 Beyla

    eBPF 的发展如火如荼,在可观测性领域大放异彩,Grafana 近期也发布了一款 eBPF 采集器,可以采集服务的 RED 指标,本文做一个尝鲜介绍,让读者有个大概了解. eBPF 基础介绍可以参考 ...

  9. fastjson对接口参数的某个字段不打印输出,如文件的base64字符串

    fastjson对接口参数的某个字段不打印输出,如文件的base64字符串 package com.example.core.mydemo.json5; import com.alibaba.fast ...

  10. 淘宝二面:千万级数据中如何用Redis维护热点数据"?

    MySQL里有千万条数据,但是Redis中只存10万的数据,如何保证redis中的数据都是热点数据? 我是小宋, 一个只熬夜但不秃头的Java程序员.关注我,带你轻松过面试.提升简历亮点(14个dem ...