前端大厂面试题探索编辑部——第三期

目录

题目

单选题1

题解

关于浏览器缓存

Last-Modified/If-Modified-Since

ETag/If-None-Match

关于浏览器删除缓存数据

单选题2

题解

跨域问题

用document.domain解决的问题


题目

单选题1

1.关于浏览器缓存,以下哪个选项是不正确的()

A. 浏览器缓存可以帮助减少服务器的负载,提高网页加载速度。

B. 浏览器缓存包括强缓存和协商缓存两种。

C. Http头信息中的"Cache-Control"和"Etag"分别是强缓存和协商缓存的关键字段。

D. 当浏览器缓存过期,浏览器会直接删除缓存数据,不会向服务器发送请求。

题解

关于浏览器缓存

       浏览器缓存是一种重要的网络技术,缓存是为了减少网页加载时间和减轻服务器负载,通过存储已下载的资源,比如HTML页面、图片,JavaScript文件,CSS样式表,这会提高网页加载速度。同时,浏览器缓存主要有两种类型,即强缓存和协商缓存

       强缓存是根据http头信息中的'Cache-Control',或者'Expires'字段来判断资源是否过期的,比如说Expires就会提供一个特定的日期或者时间,指明资源会何时过期。

       协商缓存的工作原理是:当强缓存过期后,浏览器会向服务器发送请求,询问缓存内容是否仍然有效。这种方式靠关键HTTP头字段,来判断是否要对资源进行缓存。有两种:第一种是Last-Modified和If-Modified-Since第二种是ETag和If-None-Match,比如说下面的代码。

Last-Modified/If-Modified-Since

       服务器响应如下图,当浏览器首次请求一个资源时,服务器在响应头中加入Last-Modified字段,这个字段表示了资源最后一次被修改的时间。接着,浏览器会发出这样的请求,它会在请求头中包含一个If-Modified-Since字段,其值即为之前服务器发送的Last-Modified。

HTTP/1.1 200 OK
Date: Sat, 28 Jan 2024 12:00:00 GMT
Last-Modified: Wed, 25 Jan 2024 08:00:00 GMT
Content-Type: image/jpeg
Content-Length: 1024

GET /image.jpg HTTP/1.1
Host: www.example.com
If-Modified-Since: Wed, 25 Jan 2024 08:00:00 GMT

ETag/If-None-Match

       这种方式就是字段的内容不一样,功效都是浏览器向服务器询问缓存内容是否有效。服务器会提供一个ETag字段。当浏览器再次请求该资源时,发送的信息就会包含If-None-Match字段。

HTTP/1.1 200 OK
Date: Sat, 28 Jan 2024 12:00:00 GMT
ETag: "9e107d9d372bb6826bd81d3542a419d6"
Content-Type: image/jpeg
Content-Length: 1024

GET /image.jpg HTTP/1.1
Host: www.example.com
If-None-Match: "9e107d9d372bb6826bd81d3542a419d6" 

关于浏览器删除缓存数据

       首先说一下,D选项明显错误,浏览器删除缓存数据,是有很多种情况的。仅就删除缓存数据而言,有用户端手动删除缓存数据和强缓存转向协商缓存,两种情况。对于用户手动删除缓存数据,我们不管浏览器缓存是否会过期,而是根据用户自己的选择,比如本地空间有限,我们就不会考虑缓存数据过期的问题,直接就删除了。

       而对于第二种情况,强缓存转向协商缓存,这种情况是,当资源的强缓存过期时,浏览器不会立即删除缓存数据,这时候浏览器会进入协商缓存阶段,向服务器发送请求来验证缓存的内容是否仍然有效

综上所述,答案选择D。

单选题2

2.关于浏览器的同源策略和跨域,以下哪个选项是不正确的()

A. 同源策略是浏览器的一种安全策略,不同源的客户端脚本在没有明确授权的情况下,不能读/写对方的资源。

B. 如果协议、域名或端口任何一个不同,就能造成跨域。

C. 通过设置document.domain可以解决所有跨域问题。

D. JSONP和CORS是常见的跨域解决方案。

题解

跨域问题

       跨域,完整的说法是,跨域资源共享,Cross-Origin Resource Sharing,是用于让网页的受限资源能够被其他域名的页面访问的一种机制,我们可以从一个网址,用AJAX来访问另一个网址的资源。协议,域名或者端口,有任何一个不同,都会造成跨域,比如http://example.com和https://example.com就是跨域,因为协议不同。

       跨域的解决方案有多种。不同的方法,有不同的使用场景,各有优劣。

跨域解决方法原理注意点
JSONP(JSON with Padding)通过动态创建<script>元素,请求一个带有回调函数的URL仅支持GET请求
CORS(Cross-Origin Resource Sharing)CORS是一个W3C标准,允许服务器通过设置特殊的HTTP头部,来指示浏览器允许本次跨域请求服务器设置如Access-Control-Allow-Origin的HTTP响应头部
使用代理服务器在服务器端设置一个代理,接收前端发出的跨域请求,然后把这个请求转发给目标服务器,最后把结果返回给前端可以绕过浏览器的同源策略限制

       这里提到的同源策略,刚好就是A选项说的内容,同源策略是浏览器的一种安全策略,主要用于防止来自不同源的脚本对当前源的文档或者窗口进行读写操作,这样做,就是为了在不同源的客户端脚本在没有明确授权的情况下,不能读或写对方的资源

用document.domain解决的问题

       首先看看这种方法能解决什么问题。来一个具体的例子,www.google.com,这是一个完整的URL,主域即google.com,子域则为www,当然,www是最常见的子域,还有比如aws这样子域。请记住,document.domain只能解决同主域下的不同子域之间的跨域问题。

       来看看代码吧,现在假设一个场景,我们想要从a.example.com页面访问b.example.com页面中的一个iframe,但由于同源策略,不同的子域在没有适当设置的情况下,不能直接通信。首先,在一个html文件中,我们写下这样的内容。我们尝试访问iframe中的内容,然后在另一个html文件中,使用document.domain,设置为主域的地址,即可完成目标。所以,document,domain只能解决这种情况,不能解决所有的跨域问题

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>a.example.com</title><script>function accessIframe() {let iframe = document.getElementById('myIframe');let iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
​// 尝试访问iframe中的内容let content = iframeDocument.getElementById('content').innerText;alert("内容从b.example.com iframe获取: " + content);}</script>
</head>
<body><h1>欢迎来到 a.example.com</h1><iframe id="myIframe" src="http://b.example.com/iframe.html" onload="accessIframe()" width="300" height="200"></iframe>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>b.example.com</title>
</head>
<body><div id="content">这是来自 b.example.com 的内容!</div><script>// 设置document.domain为共同的主域document.domain = 'example.com';</script></body>
</html>

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

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

相关文章

centos下安装mongo C C++ 驱动

安装mongo-cxx-driver-r3.4.0 cmake的时候报错: 报错&#xff1a; CMake Error at src/mongocxx/CMakeLists.txt:54 (find_package):By not providing "Findlibmongoc-1.0.cmake" in CMAKE_MODULE_PATH thisproject has asked CMake to find a package configura…

ubuntu 安装node和npm

ubuntu 安装node 一、前言 在ubuntu中经常需要用到node ,npm&#xff0c;因为npm基本会和node同时安装&#xff0c;所以只需要安装node即可。 可以使用 nvm&#xff08;Node Version Manager&#xff09;来管理你的 Node.js 版本 二、具体步骤 1、nvm的安装 首先&#xf…

嵌入式——直接存储器存取(DMA)补充

目录 一、认识 DMA 二、DMA结构 1. DMA请求 2. 通道DMA 补&#xff1a;通道配置过程。 3. 仲裁器 三、DMA数据配置 1. 从哪里来&#xff0c;到哪里去 &#xff08;1&#xff09;从外设到存储器 &#xff08;2&#xff09;从存储器到外设 &#xff08;3&#xff09;从…

React 组件生命周期-概述、生命周期钩子函数 - 挂载时、生命周期钩子函数 - 更新时、生命周期钩子函数 - 卸载时

React 组件生命周期-概述 学习目标&#xff1a; 能够说出组件的生命周期一共几个阶段 组件的生命周期是指组件从被创建到挂在到页面中运行&#xff0c;在到组件不用时卸载组件 注意&#xff1a;只有类组件才有生命周期&#xff0c;函数组件没有生命周期(类组件需要实例化&…

LeetCode344反转字符串(java实现)

今天我们来分享的题目是leetcode344反转字符串。题目描述如下&#xff1a; 我们观察题目发现&#xff0c;题目要求使用O(1)的空间解决这一问题。那么我们就不能进行使用开辟新的数组进行反转了。 解题思路&#xff1a;那么该题的我得思路是使用双指针的方法进行题解&#xff0…

TypeScript Symbol

1.什么Symbol? Symbol是ES6中新增的一种数据类型, 被划分到了基本数据类型中 基本数据类型: 字符串、数值、布尔、undefined、null、Symbol 引用数据类型: Object 2.Symbol的作用 用来表示一个独一无二的值 3.如何生成一个独一无二的值? let xxx Symbol(); 4.为什么需要Symb…

2024獬豸杯

2024.1.28上午9-12时&#xff0c;返乡大学生边帮姐带娃边做&#xff0c;有几题没交上 解压密码&#xff1a;都考100分 手机备份包 手机基本信息 1、IOS手机备份包是什么时候开始备份的。&#xff08;标准格式&#xff1a;2024-01-20.12:12:12) 2024-01-15.14.19.44 2、请分…

Docker 安装与基本操作

目录 一、Docker 概述 1、Docker 简述 2、Docker 的优势 3、Docker与虚拟机的区别 4、Docker 的核心概念 1&#xff09;镜像 2&#xff09;容器 3&#xff09;仓库 二、Docker 安装 1、命令&#xff1a; 2、实操&#xff1a; 三、Docker 镜像操作 1、命令&#xff1…

centos7 挂载windows共享文件夹报错提示写保护

centos7挂载windows共享时&#xff0c;提示被共享的位置写保护&#xff0c;只能以只读方式挂载&#xff0c;紧接着就是以只读方式挂载失败 原因是组件少装了 yum install cifs-utils 安装完后&#xff0c;正常挂载使用。 下载离线安装包 下载离线包下载工具 下载离线安装包…

SpringBoot系列之MybatisPlus实现分组查询

SpringBoot系列之MybatisPlus实现分组查询 我之前博主曾记写过一篇介绍SpringBoot2.0项目怎么集成MybatisPlus的教程&#xff0c;不过之前的博客只是介绍了怎么集成&#xff0c;并没有做详细的描述各种业务场景&#xff0c;本篇博客是对之前博客的补充&#xff0c;介绍在mybat…

2024/1/27 备战蓝桥杯 1-1

目录 求和 0求和 - 蓝桥云课 (lanqiao.cn) 成绩分析 0成绩分析 - 蓝桥云课 (lanqiao.cn) 合法日期 0合法日期 - 蓝桥云课 (lanqiao.cn) 时间加法 0时间加法 - 蓝桥云课 (lanqiao.cn) 扫雷 0扫雷 - 蓝桥云课 (lanqiao.cn) 大写 0大写 - 蓝桥云课 (lanqiao.cn) 标题…

JUC并发编程与源码分析学习笔记(三)

目录 五十六、JMM之入门简介 五十七、JMM之学术定义和作用 五十八、JMM之三大特性 五十九、JMM之多线程对变量的读写过程 六十、JMM之happens-before-上集 六十一、JMM之happens-before-下集 五十六、JMM之入门简介 Java内存模型之JMM 1、先从大厂面试题开始 ①、你知道…

【SpringSpringBoot】概述

Spring&SpringBoot专题 【注】&#xff1a; 本专题围绕框架核心概念展开&#xff0c;渐进式深入总结学习、面试、开发经验&#xff0c;集中整理便于回顾 持续补充与施工中~~~~ 1.发展史 2.基本架构 Spring框架的基本架构是一个分层架构&#xff0c;包括多个模块&#x…

2024三掌柜赠书活动第六期:人人都离不开的算法——图解算法应用

目录 前言算法概念图解算法应用算法的价值和挑战关于《人人都离不开的算法——图解算法应用》编辑推荐内容简介作者简介图书目录书中前言/序言书摘插画《人人都离不开的算法——图解算法应用》全书速览结束语 前言 作为开发者想必都知道&#xff0c;算法是现代社会中无处不在…

day33_js

今日内容 0 复习昨日 1 JS概述 2 JS的引入方式 3 JS语法 3.1 变量 3.2 基本数据类型 3.3 引用类型 3.4 数组类型 3.5 日期类型 3.6 运算符(算术运算,逻辑,关系运算,三目运算) 3.7 分支 3.8 循环 3.9 函数(重点) 3 常见弹窗函数 alter,confirm,prompt 0 复习昨日 1 盒子模型 对d…

兄弟MFC-8515DN黑白激光多功能一体机硒鼓及粉盒清零方法

耗材信息&#xff1a; 硒鼓DR-3350&#xff1a;约30000页&#xff1b; 墨粉盒TN-3335&#xff1a;约3000页【A4纸5%覆盖率】&#xff1b; 高容量墨粉盒TN-3385&#xff1a;约8000页【A4纸5%覆盖率】&#xff1b; 超高容量墨粉盒TN-3395&#xff1a;约12000页【A4纸5%覆盖率】&a…

php项目下微信小程序对接实战问题与解决方案

一.实战问题与方案总结 1.SQL查询条件是一组数&#xff0c;传参却是一个字符串导致报错&#xff0c;如下 SQLSTATE[HY093]: Invalid parameter number (SQL: select count(*) as aggregate from car_video where province_id in (1492) and city_id in (1493) and county_id …

7 图

图的分类 有向图 add(a,b)无向图 add(a,b) add(b,a) 名词解释 完全图&#xff1a;含有e (n-1)*n/2 条边的无向图有向完全图&#xff1a;含有e (n-1)*n 条边的有向图若边或弧的个数 e<nlogn&#xff0c;则称作稀疏图&#xff0c;否则称作稠密图简单路径&#xff1a;序列中…

LeetCode Hot100 回顾(一)

哈希 128.最长连续序列 要求复杂度为O(n)的算法, 通过两次遍历实现: 第一次遍历将所有元素插入到哈希表中, 第二次遍历过程中对每个元素n进行处理, 如果哈希表中存在值为n-1的元素, 则说明该元素已经被处理或即将被处理; 若不存在, 就继续查看值为n1, n2, n3…的元素是否存在…

个体诊所电子处方系统设计,社区门诊处方开单管理系统软件教程

个体诊所电子处方系统设计&#xff0c;社区门诊处方开单管理系统软件教程 一、前言 以下软件程序操作教程以 佳易王诊所电子处方管理系统软件V17.3为例说明 如图&#xff0c;在基本信息设置里&#xff0c;可以设置处方配方模板&#xff0c;这样在开电子处方的时候可以一键导入…