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

前端高频面试题2:浏览器/计算机网络

 本专栏相关链接

前端高频面试题1:HTML/CSS

前端高频面试题2:浏览器/计算机网络

前端高频面试题3:JavaScript


 1.什么是强缓存、协商缓存? 

  • 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命中,则直接从缓存中读取资源,无需向服务器发送任何请求。(返回200)

  • 协商缓存: 当强缓存未命中时,浏览器会向服务器发送请求,询问服务器资源是否发生变化。如果服务器告知资源未改变,则浏览器从缓存中读取资源;如果服务器告知资源已改变,则浏览器会下载新资源并更新缓存。(返回304)

 2.Cookie、Session、LocalStorage、SessionStorage的区别

  • Cookie:

    • 存储位置:Cookie存储在客户端的浏览器中。

    • 生命周期:Cookie可以设置过期时间(Expires或Max-Age),到期后自动删除;若未设置过期时间,则为会话级(浏览器关闭后清除)。

    • 容量限制:一般大小限制为4KB左右。

    • 使用场景:主要用于用户身份认证(如记住登录状态)、保存用户偏好设置和跟踪用户行为(如广告点击记录)。

    • 安全性:容易被劫持(如XSS攻击),可以通过设置HttpOnly和Secure属性提高安全性。

    • 登录状态:可以在用户未登录时使用。

    • 跨页面:可以跨多个页面和不同子域共享。

    • 传输数据:每次请求都会携带 Cookie 数据。

  • Session:

      高安全性场景:适用于需要保护敏感数据的场景,如在线银行、支付系统等。

    • 存储位置:Session存储在服务端,服务器为每一个用户创建唯一的会话(Session)。

    • 生命周期:Session存在于用户活动的会话期间,当用户退出或者关闭浏览器,会话数据就会被删除。

    • 容量限制:取决于服务器配置。

    • 使用场景:用户会话管理:用于存储用户的会话信息,如购物车数据、用户权限等。

    • 安全性:相对安全,通过加密的 Session ID 进行识别和验证,且客户端不可见。

    • 登录状态:需要用户登录后才能创建和访问会话数据。

    • 跨页面:通常只能在单个会话期间。

    • 传输数据:仅在初始会话时传输 Session ID,后续请求不再携带全部会话数据。

  • LocalStorage:

      前端缓存:用于缓存大量数据,提高应用性能和用户体验。

    • 存储位置:存储在客户端,浏览器内。

    • 生命周期:持久性存储,除非手动删除,否则永久有效。

    • 容量限制:一般为 5-10MB,各浏览器可能不同。

    • 使用场景:长期数据存储:适用于存储长期有效的数据,如用户偏好设置、浏览历史等。

    • 安全性:易受 XSS 攻击,数据存储在客户端。

    • 登录状态:需要用户登录后才能创建和访问会话数据。

    • 跨页面:可以在同一域下的所有页面中共享数据。

    • 传输数据:不随请求发送,仅在客户端存储和访问。

  • SessionStorage:

      多标签页数据隔离:在同一域名下的不同标签页之间实现数据隔离,防止数据污染。

    • 存储位置:存储在客户端,浏览器内。

    • 生命周期:会话级别,浏览器关闭或标签页关闭后失效。

    • 容量限制:一般为 5-10MB,各浏览器可能不同。

    • 使用场景:临时数据存储:适用于存储会话级别的数据,如表单数据、页面状态等。

    • 安全性:易受 XSS 攻击,数据存储在客户端。

    • 登录状态:需要用户登录后才能创建和访问会话数据。

    • 跨页面:手动新建标签页无法共享数据,通过链接打开新页面会复制一套原有数据,但与原数据是独立的。

    • 传输数据:不随请求发送,仅在客户端存储和访问。

3. 输入一个URL到页面过程中发生了什么

  1. 通过 DNS 解析域名的实际 IP 地址

  2. 检查浏览器是否有缓存,命中则直接取本地磁盘的 html,如果没有命中强缓存,则会向服务器发起请求(先进行下一步的 TCP 连接)

  3. 若强缓存和协商缓存都没有命中,则返回请求结果

  4. 然后与 WEB 服务器通过三次握手建立 TCP 连接。期间会判断一下,若协议是 https 则会做加密,如果不是,则会跳过这一步

  5. 加密完成之后,浏览器发送请求获取页面 html,服务器响应 html,这里的服务器可能是 server、也可能是 cdn

  6. 接下来是浏览器解析 HTML,开始渲染页面

    1. 构建DOM树:词法分析然后解析成DOM树(dom tree),是由dom元素及属性节点组成,树的根是document对象

    2. 构建CSS规则树:生成CSS规则树(CSS Rule Tree)

    3. 构建render树:Web浏览器将DOM和CSSOM结合,并构建出渲染树(render tree)

    4. 布局(Layout):计算出每个节点在屏幕中的位置

    5. 绘制(Painting):即遍历render树,并使用UI后端层绘制每个节点。

4. DNS解析的过程 

  1. 浏览器缓存:浏览器首先检查自身缓存是否有该域名的IP记录,若有则直接使用。

  2. 系统缓存与Hosts文件:若浏览器无缓存,操作系统检查本地缓存(如Windows的DNS缓存)及Hosts文件,存在记录则返回。

  3. 本地DNS服务器查询:

    1. 用户配置的本地DNS服务器(如ISP提供的或公共DNS)接收递归查询请求。

    2. 若本地DNS有缓存且未过期,直接返回IP;否则开始迭代查询。

  4. 根域名服务器指引:本地DNS向根服务器查询,根服务器返回管理该顶级域(如.com)的顶级域名服务器地址。

  5. 顶级域名服务器指引:本地DNS询问顶级服务器(如.com服务器),获取管理目标域(如example.com)的权威服务器地址。

  6. 权威域名服务器解析:本地DNS向权威服务器查询,获得域名对应的IP(如www.example.com的A记录),并缓存结果。

  7. 结果返回与缓存:本地DNS将IP返回给用户,浏览器缓存该记录,后续请求可快速响应。 

5.Cookie有哪些配置项 

1.名称和值(Name and Value)

每个Cookie都有一个名称和值,名称和值由服务器设置,并在发送给客户端时存储在浏览器中。

document.cookie = "username=JohnDoe";

2.域(Domain)

指定Cookie所属的域。默认情况下,Cookie属于创建它的域。

document.cookie = "username=JohnDoe; domain=example.com";

3.路径(Path)

指定Cookie的有效路径。只有在该路径下的页面才能访问Cookie。

document.cookie = "username=JohnDoe; path=/account";

4.有效期(Expires)

指定Cookie的过期时间。可以设置为特定的日期和时间,超过这个时间后,Cookie将被删除。

document.cookie = "username=JohnDoe; expires=Fri, 31 Dec 2024 23:59:59 GMT";

5.最大年龄(Max-Age)

指定Cookie从创建开始的有效时间,以秒为单位。这个属性比expires属性更精确。

document.cookie = "username=JohnDoe; max-age=3600";

6.安全性(Secure)

指定Cookie只能通过HTTPS协议发送,确保数据传输的安全性。

document.cookie = "username=JohnDoe; secure";

7.HttpOnly

指定Cookie只能通过HTTP协议访问,客户端JavaScript无法访问,增加安全性,防止跨站脚本攻击(XSS)。

document.cookie = "username=JohnDoe; HttpOnly";

8.SameSite

指定Cookie的SameSite属性,防止跨站请求伪造(CSRF)攻击。取值可以是StrictLaxNone

document.cookie = "username=JohnDoe; SameSite=Strict";

6.常见的浏览器状态码有哪些

  • 200 OK​​:请求成功,服务器成功处理了请求
  • ​201 Created​​:请求成功,并在服务器创建了新的资源
  • ​301 Moved Permanently​​:请求的资源已永久移动到新位置(客户端应使用新URI进行后续请求,如网站域名永久更改)
  • ​302 Found​​:请求的资源临时移动到另一个位置(客户端应使用新URI进行本次请求,但后续请求可能使用原URI,如临时维护重定向)
  • ​303 See Other​​:服务器指示客户端通过GET方法在另一个URI获取资源(常用于POST请求后的重定向,如提交表单后跳转到结果页面)
  • ​304 Not Modified​​:资源未修改,客户端可使用缓存版本(用于条件GET请求,如浏览器缓存有效时)
  • ​400 Bad Request​​:请求语法错误(多为传参形式错误)
  • ​401 Unauthorized​​:请求需要用户身份认证(未登录)
  • ​403 Forbidden​​:无访问权限
  • ​404 Not Found​​:请求资源不存在
  • ​405 Method Not Allowed​​:请求方式不被允许(如使用Post请求一个Get请求)
  • ​500 Internal Server Error​​:服务器内部错误
  • ​502 Bad Gateway​​:服务器作为网关或代理,上游服务器无法收到响应(如后台通过nginx代理,但后台服务没有启动)
  • ​503 Service Unavailable​​:服务器暂时无法处理请求(通常由于过载或维护,客户端可稍后重试,如服务器重启中)

 7.什么是浏览器的重绘、重排(回流)

  • 重绘:重绘是指当元素样式发生改变,但不影响布局,浏览器重新绘制元素的过程。如改变元素的color、background、box-shadow等属性。

  • 重排(回流):重排是指元素的布局属性发生变化,需要重新计算元素在浏览器中的位置,浏览器重新进行布局的过程。如元素宽高度、位置、增删元素等。

8.GET和POST请求的区别

  • 区别点

    • GET请求会被浏览器主动缓存,POST不会;

    • GET在浏览器回退不会再次请求,POST会再次提交请求;

    • GET请求参数会被完整保留在浏览器历史记录里,POST中的参数不会;

    • GET请求能由浏览器自动发起(请求image等),POST不能;

    • GET参数放于URL中,POST通常放于Request Body中。

  • 相同点

    • 都不安全,基于http明文传输(可自行进行加密处理);

    • 参数没有大小限制,但URL有长度限制。

相关文章:

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...

高防服务器价格高原因分析

高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC&#xf…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...