当前位置: 首页 > article >正文

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

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请求
  • 服务器处理请求
  • 浏览器接收与渲染
  • 连接关闭与缓存

 

相关文章:

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

1.url解析与DNS解析 浏览器解析用户输入的URL,提取协议(HTTP\HTTPS)、域名、端口及路径等信息 浏览器首先检查本地DNS缓存和系统DNS缓存,若未命中,查询本地hosts文件 最后递归查询向本地DNS服务器发起请求&#xff…...

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) 的增强版,提供了更多的功能…...

cmake结合qt开发界面程序实例

在使用 CMake 构建 Qt 界面应用程序时,你需要设置 CMakeLists.txt 文件来指定项目配置、源文件、库依赖等。以下是一个简单的示例,展示了如何创建一个包含 Qt 界面(使用 QWidget)的 Qt 项目,并使用 CMake 进行构建。 …...

vue3二次封装tooltip实现el-table中的show-overflow-tooltip效果

开发过程中遇到需要根据后端返回的数据长度来判断是否需要使用el-tooltip的情况,想到el-table里面就有这种交互效果,如果不论文字是否超出容器长度都展示tooltip的话,交互效果难免会差很多,所以二次封装了这个组件: 给…...

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

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

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

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

每天看一篇漏洞报告

前言: 内容来源于乌云漏洞 今日思考xss漏洞, 今天看到一篇文章,里面详细说了xss的绕过技巧,虽然时间久了,没有去尝试,待会有时间去测试一下 以下是整理后的文章,原文在下面 文章链接&#…...

采用贝塞尔函数,进行恒定束宽波束形成算法

matlab采用贝塞尔函数,进行恒定束宽波束形成算法 beselle.m , 1452 20191225160928.png , 43700 20191225160935.png , 45238 20191225161010.png , 76862...

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三大特性之一的多态,我们主要介绍了多态的构成条件,但是对于多态的原理我们探讨的是不够深入的,下面这这一篇文章,我们将…...

国产编辑器EverEdit - 语法着色文件的语法

1 语法着色定义(官方文档) 1.1 概述 EverEdit有着优异的语法着色引擎,可以高亮现存的绝大多数的编程语言。在EverEdit的语法着色中有Region和Item两个概念,Region表示着不同的区块。而Item则代表着这些区块中不同的部分。一般情况下,Region…...

vue3当中使用Pinia的store的组件化开发模式

一、安装与初始化 安装Pinia npm install pinia # 或 yarn add pinia目的:引入Pinia核心库,为状态管理提供基础支持。 挂载Pinia实例 在main.js中初始化并注入Vue应用: import { createApp } from vue import { createPinia } from pinia i…...

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…...

【服务器知识】Nginx路由匹配规则说明

Nginx路由匹配规则说明 **一、Nginx路由匹配核心机制****二、匹配规则语法详解**1. **精确匹配 ()**2. **前缀匹配 (^~ 或 /)**3. **正则匹配 (~ 或 ~*)**4. **通配符匹配 (*)** **三、路由匹配优先级顺序****四、高级路由技巧**1. **条件判断 (if语句)**2. **路径重写 (rewrit…...

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

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

OpenAI--Agent SDK简介

项目概述 OpenAI Agents SDK 是一个轻量级但功能强大的框架,用于构建多智能体工作流。它主要利用大语言模型(LLM),通过配置智能体、交接、护栏和跟踪等功能,实现复杂的工作流管理。以下是对其各个部分运行过程和代码流…...

pytorch小记(十三):pytorch中`nn.ModuleList` 详解

pytorch小记(十三):pytorch中nn.ModuleList 详解 PyTorch 中的 nn.ModuleList 详解1. 什么是 nn.ModuleList?2. 为什么不直接使用普通的 Python 列表?3. nn.ModuleList 的基本用法示例:构建一个包含两层全连…...

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. 检查插件来源和开发者信誉 选择可信来源:仅从官方插件库或可信的第三方开发者处…...

修改HuggingFace模型默认缓存路径

huggingface模型的默认缓存路径是~/.cache/huggingface/hub/ 通常修改为自己的路径会更为方便。 方式一:cache_dir 参数 可以通过from_pretrained函数中的 cache_dir 参数来指定,缺点,每次都需要手动指定,比较麻烦。 如&#x…...