【八股文】从浏览器输入一个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请求
  • 服务器处理请求
  • 浏览器接收与渲染
  • 连接关闭与缓存

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯每日一题】3.17

🏝️专栏: 【蓝桥杯备篇】 🌅主页: f狐o狸x 他们说内存泄漏是bug,我说这是系统在逼我进化成SSR级程序员 OK来吧,不多废话,今天来点有难度的:二进制枚举 二进制枚举,就是…

Matlab 汽车振动多自由度非线性悬挂系统和参数研究

1、内容简介 略 Matlab 169-汽车振动多自由度非线性悬挂系统和参数研究 可以交流、咨询、答疑 2、内容说明 略 第二章 汽车模型建立 2.1 汽车悬架系统概述 2.1.1 悬架系统的结构和功能 2.1.2 悬架分类 2.2 四分之一车辆模型 对于车辆动力学,一般都是研究其悬…

hackmyvm-Smol

信息收集 ┌──(root㉿kali)-[/home/kali] └─# arp-scan -I eth1 192.168.56.0/24 Interface: eth1, type: EN10MB, MAC: 00:0c:29:34:da:f5, IPv4: 192.168.56.103 WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied WARNING: Cannot open MAC/Vendo…

深度学习项目--基于DenseNet网络的“乳腺癌图像识别”,准确率90%+,pytorch复现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 如果说最经典的神经网络,ResNet肯定是一个,从ResNet发布后,很多人做了修改,denseNet网络无疑是最成功的…

基于x11vnc的ubuntu远程桌面

1、安装VNC服务 sudo apt install x11vnc -y2、创建连接密码 sudo x11vnc -storepasswd3、安装lightdm服务 x11vnc 在 默认的 GDM3 中不起作用,因此需要使用 lightdm 桌面管理环境 sudo apt install lightdm -y切换至lightdm,上一步已经切换则跳过该…

Git 常用命令完全指南:从入门到高效协作

文章需要结构清晰,涵盖从入门到进阶的常用命令,结合实例和注意事项,帮助用户快速掌握Git的核心功能,并应用到实际项目中 一、仓库初始化与基础操作 1. 创建与克隆仓库 # 初始化本地仓库 git init# 克隆远程仓库(SSH方…

【运维自动化-标准运维】如何实现一个最简单的流程编排

流程编排是标准运维最核心的功能,通过将不同功能的原子插件在画布上可视化的拖拽编排,可以实现各种不同场景的跨系统工作流。标准运维流程 根据实际运维操作场景梳理出来的操作步骤,通过不同的流转逻辑(并行、分支、条件并行&…

【DeepSeek】HTML Api调用(支持V3和 R1,多轮对话、流式输出、对话保存、markdown格式支持)

文章目录 一、项目结构二、功能支持三、使用方法四、待改进五、参数优化 ☘️ 项目地址:https://github.com/CQUPTLei/DeepSeek_HTML/tree/master 对话截图: 一、项目结构 C:\USERS\14134\DESKTOP\DEEPSEEK │ .gitignore │ DeepSeek.html # 所…

烽火HG680-KB_海思HI3798MV310_安卓9.0_U盘强刷固件包及注意点说明

之前发布过这个固件包,关于烽火HG680-KA/HG680-KB_海思HI3798MV310_安卓9.0_U盘强刷固件包详细说明一下,汇总总结一些常遇到的情况,这次固件会分开发布,以免混淆。 上一个帖子地址:烽火HG680-KA&#xff0…

蓝桥杯备赛(基础语法4)

冒泡排序 冒泡排序的思想 冒泡排序的思想是每次将最大的一下一下运到最右边,然后将最右边这个确定下来。再来确定第二大的,再确定第三大的... 对于数组 a [ ] ,具体的来说,每次确定操作就是从左往右扫描,如果 a [ i ] > a [ …

【算法】力扣 713题:乘积小于 K 的子数组之深入思考

文章目录 前言题目:乘积小于 K 的子数组参考思路方法一:滑动窗口方法二:二分查找 参考题解方法一:滑动窗口解法方法二:二分查找解法 深入思考浮点精度?right - left 1?二分法?哈希优…

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

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

Docker 部署 Graylog 日志管理系统

Docker 部署 Graylog 日志管理系统 前言一、准备工作二、Docker Compose 配置三、启动 Graylog 服务四、访问 Graylog Web 界面总结 前言 Graylog 是一个开源的日志管理平台,专为实时日志收集、分析和可视化设计。它支持强大的搜索功能,并且与 Elastics…

【图论】并查集的学习和使用

目录 并查集是什么? 举个例子 组成 父亲数组: find函数: union函数: 代码实现: fa[] 初始化code: find code: 递归实现: 非递归实现: union code : 画图模拟: 路径压缩&#xff1a…

FPGA-流水灯

Quartus中使用Verilog实现 根据之前所学内容,打开Quartus 软件,新建FPGA项目文件,建立好空项目过后,选择Verilog HDL File,因为我们要使用Verilog代码实现仿真。 详细操作可参考往期博客: FPGA 实验报告&a…

React19源码系列之createRoot的执行流程是怎么的?

2024年12月5日,react发布了react19版本。后面一段时间都将学习它的源码,并着手记录。 react官网:react19新特性 https://react.dev/blog/2024/12/05/react-19 在用vite创建react项目的使用,main.tsx主文件都会有以下代码。 //i…

全网首创/纯Qt/C++实现国标GB28181服务/实时视频/云台控制/预置位/录像回放和下载/事件订阅/语音对讲

一、前言说明 用纯Qt来实现这个GB28181的想法很久了,具体可以追溯到2014年,一晃十年都过去了,总算是整体的框架和逻辑都打通了,总归还是杂七杂八的事情多,无法静下心来研究具体的协议,最开始初步了解协议后…

Qt 实操记录:打造自己的“ QQ 音乐播放器”

目录 一.界面设计1.成品界面分析2.head界面实现3.body界面实现4.主界面设置(1).设置无标题栏与阴影效果(2).重写鼠标事件实现拖拽 二.自定义控件1.BtFrom界面设计2.推荐页面设计3.recBox页面设计4.recBoxItem页面设计(1).eventFilter介绍和使用(2).QJsonObject介绍和使用(3).向…

如何打造安全稳定的亚马逊采购测评自养号下单系统?

在当今的电商领域,亚马逊作为全球领先的在线购物平台,其商品种类繁多,用户基数庞大,成为了众多商家和消费者的首选。而对于一些需要进行商品测评或市场调研的用户来说,拥有一个稳定、安全的亚马逊账号体系显得尤为重要…

Python文字识别OCR

一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…