【八股文】从浏览器输入一个url到服务器的流程

news2025/3/19 23:15:47

1.url解析与DNS解析

浏览器解析用户输入的URL,提取协议(HTTP\HTTPS)、域名、端口及路径等信息

浏览器首先检查本地DNS缓存和系统DNS缓存,若未命中,查询本地hosts文件

最后递归查询向本地DNS服务器发起请求,获取域名对应的IP地址

这里我想插入一段,讲讲本地DNS缓存、系统DNS缓存、Hosts文件、DNS服务器几者之间的关系

首先,不要觉得很复杂,其实本质就是为了根据域名拿IP地址,只是好几个地方缓存了,先这么简单理解。然后继续往下看。

本地DNS缓存是浏览器缓存,浏览器缓存会缓存最近访问的域名与IP的映射关系,来减少重复查询的延迟

但本地DNS缓存时间较短,比如chrome默认只有1分钟

用户输入URL后,浏览器首先检查自身缓存,若命中就直接使用IP地址


系统DNS缓存是操作系统缓存,操作系统也维护了独立的DNS缓存,用于存储域名解析结果,避免重复请求DNS服务器

若浏览器缓存未命中,操作系统会检查自身缓存,若命中直接返回IP地址


Hosts文件是本地手动配置的域名与IP的映射文件,路径一般为C:\Windows\System32\drivers\etc\hosts

修改后会强制清空操作系统DNS缓存

浏览器缓存和系统缓存均未命中时,操作系统会检查hosts文件,若命中,直接使用配置的IP地址


当本地、系统缓存及Hosts文件均未命中时,操作系统就会向配置的本地DNS服务器发起递归查询

2.TCP连接建立

三次握手:通过TCP协议与服务器建立可靠连接

连接复用:HTTP 1.1默认支持keep-alive, 复用TCP连接以减少握手开销

3.发送HTTP请求

浏览器构造HTTP请求,包含请求行(方法、URI、协议)、请求头(user-Agent、Host、Cookie)、请求体

4.服务器处理请求

如果是静态资源,直接返回文件

如果是动态资源,调用后端服务生成响应内容

构建响应内容,包含状态行(http/1.1 200 ok)、响应头(Content-type、重定向地址、缓存策略)、响应体

5.浏览器接收与渲染

浏览器解析响应头,根据状态码决定后续操作

浏览器进行资源加载和页面渲染

6.连接关闭与缓存

四次挥手关闭连接

DNS缓存,减少后续解析延迟

浏览器对静态资源副本进行缓存,通过ETag或last-Modified验证资源是否更新

讲讲协商缓存ETag和Last-Modified

浏览器在发送请求的时候,首先会检查强制缓存,如果缓存命中,则不需要发送请求。直接从缓存中获取资源数据,若强缓存失效,则发送请求进去协商缓存,服务器通过请求头Last-Modified或Etag字段进行检查,若200表示资源有更新,304则表示资源没变,直接取缓存即可。

若同时存在ETag和Last-Modified,服务器优先验证ETag。

ETag是基于资源内容hash,精确到字节级别,适用于对内容变化敏感的资源(比如JSON、js文件)

Last-Modified是基于修改时间,精确到秒级别,适用于文件、图片等不频繁更新的静态资源

总结

从浏览器输入一个url到服务器的流程如下:

  • url解析与DNS解析
  • TCP连接建立
  • 发送HTTP请求
  • 服务器处理请求
  • 浏览器接收与渲染
  • 连接关闭与缓存

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2318021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++和标准库速成(八)——指针、动态数组、const、constexpr和consteval

目录 1. 指针和动态数组1.1 栈和自由存储区1.2 使用指针1.3 动态分配的数组1.4 空指针常量 2. const2.1 const修饰类型2.2 const与指针2.3 使用const保护参数2.4 const方法(建议) 3. constexpr4. consteval参考 1. 指针和动态数组 动态内存允许所创建的程序具有在编…

超声重建,3D重建 超声三维重建,三维可视化平台 UR 3D Reconstruction

1. 超声波3D重建技术的实现方法与算法 技术概述 3D超声重建是一种基于2D超声图像生成3D体积数据的技术,广泛应用于医学影像领域。通过重建和可视化三维结构,3D超声能够显著提高诊断精度和效率,同时减少医生的脑力负担。本技术文档将详细阐述…

[HelloCTF]PHPinclude-labs超详细WP-Level 6Level 7Level 8Level 9-php://协议

由于Level 6-9 关的原理都是通用的, 这里就拿第6关举例, 其他的关卡同理 源码分析 定位到代码 isset($_GET[wrappers]) ? include("php://".$_GET[wrappers]) : ; 与前几关发生变化的就是 php:// 解题分析 这一关要求我们使用 php协议 php:// 协议 php://filte…

【Linux】Bash是什么?怎么使用?

李升伟 整理 什么是 Bash? Bash(Bourne Again Shell)是一种 命令行解释器(Shell),广泛用于 Unix 和 Linux 操作系统。它是 Bourne Shell(sh) 的增强版,提供了更多的功能…

如何创建并保存HTML文件?零基础入门教程

原文:如何创建并保存HTML文件?零基础入门教程 | w3cschool笔记 本文将以Windows系统为例,教你用最简单的记事本创建并保存第一个HTML网页。 📝 第一步:准备工具 文本编辑器:使用系统自带的记事本&#xff…

React19源码系列之FiberRoot节点和Fiber节点

在上一篇文章,看了createRoot函数的大致流程。 createContainer函数创建并返回了FiberRoot 。FiberRoot是由createFiberRoot函数创建, createFiberRoot函数还将 FiberRoot和 根Fiber 通过current属性建立起了联系。将FiberRoot作为参数传给 ReactDOMRoo…

TCP协议的多线程应用、多线程下的网络编程

DAY13.2 Java核心基础 多线程下的网络编程 基于单点连接的方式,一个服务端对应一个客户端,实际运行环境中是一个服务端需要对应多个客户端 创建ServerSocketNable类,多线程接收socket对象 public class ServerSocketNable implements Run…

华为中小型企业项目案例

实验目的(1) 熟悉华为交换机和路由器的应用场景 (2) 掌握华为交换机和路由器的配置方法 实验拓扑实验拓扑如图所示。 华为中小型企业项目案例拓扑图 实验配置市场部和技术部的配置创建VLANLSW1的配置 [LSW1]vlan batch 10 20 [LSW1]q…

LabVIEW VI Scripting随机数波形图自动生成

通过LabVIEW VI Scripting 技术,实现从零开始编程化创建并运行一个随机数波形监测VI。核心功能包括自动化生成VI框架、添加控件与函数、配置数据流逻辑及界面布局优化,适用于批量生成测试工具、教学模板开发或复杂系统的模块化构建。通过脚本化操作&…

MATLAB 控制系统设计与仿真 - 26

状态空间控制系统概述 状态空间描述 现代控制理论是建立在状态空间基础上的控制系统分析和设计理论,它用状态变量来刻画系统的内部特征,用‘一节微分方程组’来描述系统的动态特性。系统的状态空间模型描述了系统输入/输出与内部状态之间的关系&#x…

Python----计算机视觉处理(Opencv:图像镜像旋转)

一、图像镜像旋转 图像的旋转是围绕一个特定点进行的,而图像的镜像旋转则是围绕坐标轴进行的。图像镜像旋转,也可 以叫做图像翻转,分为水平翻转、垂直翻转、水平垂直翻转三种。 通俗的理解为,当以图片的中垂线为x轴和y轴时&#x…

C++从入门到入土(八)——多态的原理

目录 前言 多态的原理 动态绑定与静态绑定 虚函数表 小结 前言 在前面的文章中,我们介绍了C三大特性之一的多态,我们主要介绍了多态的构成条件,但是对于多态的原理我们探讨的是不够深入的,下面这这一篇文章,我们将…

PyCharm安装redis,python安装redis,PyCharm使用失败问题

报错信息 Usage: D:\wb2\wbrj_pys\venv\Scripts\python.exe -m pip install [options] [package-index-options] … D:\wb2\wbrj_pys\venv\Scripts\python.exe -m pip install [options] -r [package-index-options] … D:\wb2\wbrj_pys\venv\Scripts\python.exe -m pip instal…

保姆级离线TiDB V8+解释

以前学习的时候还是3版本,如今已经是8版本了 https://cn.pingcap.com/product-community/?_gl1ujh2l9_gcl_auMTI3MTI3NTM3NC4xNzM5MjU3ODE2_gaMTYwNzE2NTI4OC4xNzMzOTA1MjUz_ga_3JVXJ41175MTc0MTk1NTc1OC4xMS4xLjE3NDE5NTU3NjIuNTYuMC41NDk4MTMxNTM._ga_CPG2VW1Y4…

PyTorch 深度学习实战(17):Asynchronous Advantage Actor-Critic (A3C) 算法与并行训练

在上一篇文章中,我们深入探讨了 Soft Actor-Critic (SAC) 算法及其在平衡探索与利用方面的优势。本文将介绍强化学习领域的重要里程碑——Asynchronous Advantage Actor-Critic (A3C) 算法,并展示如何利用 PyTorch 实现并行化训练来加速学习过程。 一、A…

Docker换源加速(更换镜像源)详细教程(2025.3最新可用镜像,全网最详细)

文章目录 前言可用镜像源汇总换源方法1-临时换源换源方法2-永久换源(推荐)常见问题及对应解决方案1.换源后,可以成功pull,但是search会出错 补充1.如何测试镜像源是否可用2.Docker内的Linux换源教程 换源速通版(可以直…

SpringData Redis:RedisTemplate配置与数据操作

文章目录 引言一、Redis概述与环境准备二、RedisTemplate基础配置三、连接属性配置四、操作String类型数据五、操作Hash类型数据六、操作List类型数据七、操作Set类型数据八、操作ZSet类型数据九、事务与管道操作总结 引言 Redis作为高性能的NoSQL数据库,在分布式系…

Qt按钮控件常用的API

1.创建按钮 QPushButton *btnnew QPushButton; 以顶层方式弹出窗口控件 代码: #include "widget.h" #include "ui_widget.h" #include"QPushButton"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui-&…

如何检查CMS建站系统的插件是否安全?

检查好CMS建站系统的插件安全是确保网站安全的重要环节,对于常见的安全检查,大家可以利用以下几种有效的方法和工具,来帮你评估插件的安全性。 1. 检查插件来源和开发者信誉 选择可信来源:仅从官方插件库或可信的第三方开发者处…

【Matlab GUI】封装matlab GUI为exe文件

注:封装后的exe还是需要有matlab环境才能运行 (1)安装MCRinstaller.exe文件,在matlab安装目录下的toolbox/compiler/deploy/win64文件夹里 (2)安装完MCRinstaller.exe,字命令窗口输入&#x…