在浏览器中输入一个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. 如果个人pc上要装不同社区版本的pycharm,安装时需要注意的一点

    pycharm下载地址[包含了目前发行的所有版本]:https://www.jetbrains.com/pycharm/download/other.html 选择指定的版本,点击 勾选uninsta ...

  2. Vue cli之路由router

    一.安装路由 Vue-router用于提供给vue项目在开发中用于绑定url和组件页面的关系的核心插件. 默认情况下,vue没有提供路由的功能,所以我们使用vue-router,并需要在项目根目录. ...

  3. FFmpeg中的关键方法及结构体(二)avformat_open_input

    1.avformat_open_input 该方法声明在libavformat/avformat.h:2093 int avformat_open_input(AVFormatContext **ps ...

  4. rabbitmq添加延时通道时报错

    rabbitmq添加延时通道时报错 'x-delayed-type' must be an existing exchange type 解决方案: 我实际用的是x-delayed-type:topi ...

  5. nginx37条优化

    nginx优化: 1. cpu:核心配置 方法1: worker_processes auto; 自动调用[推荐] 方法2: worker_processes 4; 手工配置 检查CPU核心:yum ...

  6. Qt-FFmpeg开发-实现录屏功能(10)

    音视频/FFmpeg #Qt Qt-FFmpeg开发-实现录屏功能 目录 音视频/FFmpeg #Qt Qt-FFmpeg开发-实现录屏功能 1.概述 2.实现效果 3.FFmpeg录屏代码流程️‍️ ...

  7. itest(爱测试) 开源接口测试,敏捷测试管理平台10.1.0发布

    一:itest work 简介 itest work 开源敏捷测试管理,包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock,还有压测 ,又有丰富的统计分析,8合1工作站.可按 ...

  8. Java synchronized与ReentrantLock的区别

    synchronized与ReentrantLock的区别 synchronized是一个关键字,ReentrantLock是一个类 synchronized修饰代码块和方法,ReentrantLoc ...

  9. 剑指Offer-47.求1+2+3+...+n(C++/Java)

    题目: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 分析: 利用短路与来判断n是否大于0,从而实现递 ...

  10. vm ware 虚拟WIN XP 时卡

    主机是I7 9700,SN750 NVME 1T SSD, 32G 内存,VM WARE 14,理论上虚拟WIN XP 不会卡,但实际情况就是很卡. 虚拟WIN7 ,WIN 10,UBUNTU LIN ...