前端常见面试题之ajax、http
文章目录
- 一、手写ajax请求
- 1. get
- 2. post
- 3. xhr.readyState
- 4. xhr.status
- 5. xhr.open
- 二、跨域
- 三、cookie、localStorage和sessionStorage
- 四、http
- 1. http常见的状态码有哪些
- 2. http常见的header有哪些
- 3. 什么是RestfulAPI
- 4. 描述一下http的缓存机制
- 5. https
一、手写ajax请求
1. get
// 1.创建一个XMLHttpRequest对象let xhr = new XMLHttpRequest();// 2.设置请求行xhr.open('get', 'http://localhost:3000/get');// 3.设置请求头xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');// 4.设置请求体xhr.send(null);// 5.监听请求状态xhr.onreadystatechange = function() {// 6.判断请求状态if(xhr.readyState === 4 && xhr.status === 200) {// 7.获取响应体console.log(xhr.responseText);}}
2. post
// 1.创建一个XMLHttpRequest对象let xhr = new XMLHttpRequest();// 2.设置请求行xhr.open('post', 'http://localhost:3000/post');// 3.设置请求头xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');// 4.设置请求体xhr.send('name=小明&age=18'); // 这里得传字符串// 5.监听请求状态xhr.onreadystatechange = function() {// 6.判断请求状态if(xhr.readyState === 4 && xhr.status === 200) {// 7.获取响应体console.log(xhr.responseText);}}
3. xhr.readyState
xhr.readyState
有以下状态值,分别代表的意思如下:
状态值 | 意思 |
---|---|
0 | 未初始化,尚未调用open方法 |
1 | 启动,已经调用open方法 |
2 | 发送,已经调用send方法 |
3 | 接收,正在接收响应数据 |
4 | 完成,已经接收到全部响应数据 |
请注意,在这个表格中,状态值是从0开始的,0代表xhr对象已经被创建但尚未调用open方法,直到4代表请求已完成且响应数据已接收完毕。
4. xhr.status
http状态码
状态码 | 含义 | 说明 |
---|---|---|
200 | OK | 请求成功 |
301 | Moved Permanently | 资源被永久移动到新的URL |
302 | Found | 资源被临时移动到新的URL |
400 | Bad Request | 请求有误,服务器无法处理 |
401 | Unauthorized | 请求需要身份验证 |
403 | Forbidden | 服务器拒绝该请求 |
404 | Not Found | 请求的资源不存在 |
500 | Internal Server Error | 服务器遇到错误 |
502 | Bad Gateway | 服务器作为网关或代理时收到无效响应 |
503 | Service Unavailable | 服务器暂时不可用 |
504 | Gateway Timeout | 服务器作为网关或代理时在等待上游服务器响应时超时 |
5. xhr.open
xhr.open方法有三个参数,含义如下:
method
:表示HTTP请求的方法,比如GET、POST等。url
:表示请求的URL地址。async
:表示请求是否为异步,默认为true
,即异步请求。
如果第三个参数为true,则表示异步请求,即浏览器不需要等待服务器返回响应即可继续执行后面的代码。如果第三个参数为false,则表示同步请求,即浏览器需要等待服务器返回响应后才能继续执行后面的代码。
二、跨域
大家可以看看这篇什么是跨域(浏览器同源政策),如何解决跨域
三、cookie、localStorage和sessionStorage
cookie、localStorage和sessionStorage都是用于在浏览器端存储数据的技术。它们的用途、区别和大小如下所示:
Cookie | localStorage | sessionStorage | |
---|---|---|---|
用途 | 用于在浏览器和服务器之间传递数据,包括会话管理、持久性登录状态等 | 用于在浏览器端存储较大量的数据,包括长期保存的用户配置、个人信息等 | 用于在浏览器端存储临时性的数据,仅在当前会话有效 |
存储位置 | 存储在客户端,会自动随HTTP请求发送到服务器 | 存储在客户端,不会自动发送到服务器 | 存储在客户端,不会自动发送到服务器 |
大小限制 | 最大可以存储4KB的数据 | 最大可以存储5MB的数据 | 最大可以存储5MB的数据 |
生命周期 | 可设置过期时间,可以在浏览器重启后仍然存在 | 除非被手动清除,否则会一直存在 | 仅在当前会话有效,关闭浏览器后会被自动清除 |
访问限制 | 对于每个具体的cookie,可以设置访问限制(如域名、路径等) | 仅对于设置localStorage的网页可访问 | 仅对于设置sessionStorage的网页可访问 |
API | 可以使用document.cookie来读取和写入cookie | 可以使用localStorage对象的方法(如setItem、getItem、removeItem等) | 可以使用sessionStorage对象的方法(如setItem、getItem、removeItem等) |
需要注意的是,每个浏览器对cookie、localStorage和sessionStorage的实现可能会有一些细微的差异,例如存储上限可能会略有不同。上述表格仅提供了一般情况下的常见规范。
四、http
1. http常见的状态码有哪些
http状态码
状态码 | 含义 | 说明 |
---|---|---|
200 | OK | 请求成功 |
301 | Moved Permanently | 资源被永久移动到新的URL |
302 | Found | 资源被临时移动到新的URL |
400 | Bad Request | 请求有误,服务器无法处理 |
401 | Unauthorized | 请求需要身份验证 |
403 | Forbidden | 服务器拒绝该请求 |
404 | Not Found | 请求的资源不存在 |
500 | Internal Server Error | 服务器遇到错误 |
502 | Bad Gateway | 服务器作为网关或代理时收到无效响应 |
503 | Service Unavailable | 服务器暂时不可用 |
504 | Gateway Timeout | 服务器作为网关或代理时在等待上游服务器响应时超时 |
2. http常见的header有哪些
常见的HTTP请求头(Request Headers)如下所示:
Header字段 | 说明 |
---|---|
Accept | 告诉服务器可以发送的媒体类型 |
Accept-Charset | 告诉服务器请求的字符集 |
Accept-Encoding | 告诉服务器请求的内容编码方式 gzip |
Accept-Language | 告诉服务器请求的语言 |
Authorization | 包含用户凭证的认证信息 |
Cache-Control | 缓存机制指令 |
Connection | 管理持久连接 keep-alive |
Content-Length | 请求体的大小 |
Content-Type | 请求体的媒体类型 |
Cookie | 之前保存的服务器发送的Cookie |
Host | 请求的主机名或IP地址 |
User-Agent | 包含发送请求的用户代理的信息 |
Referer | 发送请求的页面的URL |
Origin | 发起一个对跨域资源的请求 |
常见的HTTP响应头(Response Headers)如下所示:
Header字段 | 说明 |
---|---|
Accept-Ranges | 标识服务器是否支持范围请求 |
Cache-Control | 缓存机制指令 |
Content-Encoding | 响应内容的编码方式 gzip |
Content-Length | 响应的大小 |
Content-Type | 响应内容的媒体类型 |
Set-Cookie | 服务器发送的Cookie |
Date | 响应生成的日期和时间 |
Etag | 客户端缓存检查标识符 |
Server | 服务器标识 |
Last-Modified | 资源最后修改的时间 |
Location | 资源被重新定位的URL |
Access-Control-Allow-Origin | 允许跨域资源共享的域 |
Access-Control-Allow-Headers | 允许的跨域请求的自定义请求头 |
请注意,这些是其中一些常见的HTTP头部字段,实际上还有很多其他的头部字段可以用于请求和响应。
3. 什么是RestfulAPI
RESTful API
是一种使用 HTTP
协议和标准 REST(Representational State Transfer)
原则设计的 API,用于系统之间的通信。它允许客户端通过 HTTP 方法(GET、POST、PUT、DELETE)对资源进行操作,并使用 URL 定位资源。
与传统的 API
相比,RESTful API
有以下区别:
- 设计风格:RESTful API 遵循
资源
的风格,将每个资源都用一个唯一的 URI 表示,并使用合适的 HTTP 方法对其进行操作。而传统
的 API 常常使用不同的 URI 和操作来表示不同的功能
。 - 状态无关:RESTful API 是无状态的,每个请求都应该包含足够的信息来处理请求,不依赖于之前的请求或状态。传统的 API 常常依赖于会话状态。
- 结果表现:RESTful API 返回的结果通常是资源的表现形式,比如 JSON 或 XML 格式的数据。传统的 API 则常常返回各种包装过的数据格式。
- 缓存支持:RESTful API 支持缓存,可以减少网络传输和服务器负载。传统的 API 不一定具备缓存能力。
- 可扩展性:RESTful API 的设计使得系统易于扩展和维护,因为它使用标准的 HTTP 协议和约束。传统的 API 可能因为实现的特定细节而难以扩展。
总的来说,RESTful API 更加简单、灵活、可扩展和易于使用,适用于不同平台和系统的集成。
4. 描述一下http的缓存机制
HTTP的缓存机制是为了提高网页加载速度,减轻服务器和网络的负载。具体过程如下:
-
客户端发起HTTP请求时,服务器会在响应头部的Cache-Control字段或Expires字段中设置缓存策略。常见的缓存策略有:no-cache(不缓存), no-store(不缓存和存储), public(可公开缓存), private(仅个人缓存)等。
-
客户端收到服务端的响应后,将响应内容以及缓存策略保存到本地缓存中。
-
客户端下一次请求相同资源时,先检查本地缓存,如果缓存有效则直接从本地缓存中读取响应内容,不再发送请求到服务器。
-
当缓存过期或者被标记为无效时,客户端会发送一个条件请求到服务器,其中会包含一个If-Modified-Since或者If-None-Match字段,用于告诉服务器上次缓存的响应的最后修改时间或者ETag。
-
服务器收到条件请求后,会根据请求中的If-Modified-Since或者If-None-Match字段与资源的最后修改时间或者ETag进行比较。如果资源没有更新,则返回状态码304 Not Modified,客户端可以继续使用本地缓存;如果资源已经更新,则返回新的响应内容。
-
当服务器返回新的响应内容时,客户端会将新的响应内容和缓存策略更新到本地缓存中,以备下一次使用。
需要注意的是,客户端和服务器之间的缓存是相互独立的,服务器可以通过在响应头中设置Cache-Control字段或Expires字段来控制客户端的缓存策略,而客户端也可以通过设置请求头中的Cache-Control字段来控制服务器的缓存策略。
HTTP的缓存机制可以用以下图示来描述:
┌───────┐ ┌───────┐┌────►│ Client│◄──────────┤ Server││ └───────┘ └───────┘│ ↑ │├───────────┘ ││ │▼ ▼┌─────────────┐ ┌───────────────────┐│ Cache │ │ Origin ││ Store │◄─────►Cache-Control: max-age │└─────────────┘ └───────────────────┘▲ ▲│ │├───────────┐ │ Cache Miss│ ▼ ││ ┌───────┐ ┌───────┐└─────│ Client│◄──────────┤ Server│└───────┘ └───────┘Cache Hit
在这个图示中:
- Client发起HTTP请求,请求会经过缓存(Cache)。
- 如果缓存中没有对应的资源,缓存会将请求发送给Server。
- Server响应请求,并在响应头中携带Cache-Control指令,例如:max-age指定缓存的有效时间。
- 缓存将来自Server的响应存储在Cache Store中,并将响应返回给Client。
- 当Client再次请求相同的资源时,请求会首先发送到缓存。
- 如果缓存中存在对应资源且仍在有效期内(未过期),则缓存命中,缓存将直接返回该资源给Client。
- 如果缓存中不存在对应资源或已过期,缓存会重新向Server发起请求,重复上述过程。
这种缓存机制可以减少对服务器的请求,提高响应速度,减轻服务器负载。
5. https
HTTPS(Hypertext Transfer Protocol Secure)
是HTTP协议的安全版本,用于保护网络通信的安全性。HTTPS通过使用SSL
(Secure Sockets Layer)或TLS
(Transport Layer Security)协议来加密HTTP通信内容,从而防止数据被窃听、篡改或伪造。
在HTTPS通信中,客户端与服务器之间建立安全的加密通道,确保数据的隐私和完整性。它使用SSL或TLS协议进行加密,以保护数据传输过程中的机密信息,例如用户敏感数据、登录凭证、付款信息等。
HTTPS的工作原理大致如下:
- 客户端发起HTTPS请求时,服务器会将自己的数字证书发送给客户端。
- 客户端收到服务器的数字证书后,会验证证书的合法性和可信任性。若验证通过,则生成一个随机的对称密钥,并使用服务器的公钥对该密钥进行加密。
- 客户端将加密后的对称密钥发送给服务器。
- 服务器收到加密的对称密钥后,使用自己的私钥进行解密得到对称密钥。
- 客户端和服务器之间使用对称密钥进行加密和解密通信内容。
HTTPS可以提供以下安全保护:
- 数据加密:通过SSL/TLS协议将通信内容加密,防止数据被窃听。
- 数据完整性验证:使用数字签名保证数据的完整性,防止数据被篡改。
- 身份验证:通过数字证书验证服务器的身份,防止伪造的服务器进行攻击。
使用HTTPS可以有效提高网络通信的安全性,特别是在涉及敏感信息传输的场景,如在线支付、个人信息提交等。
相关文章:
前端常见面试题之ajax、http
文章目录 一、手写ajax请求1. get2. post3. xhr.readyState4. xhr.status5. xhr.open 二、跨域三、cookie、localStorage和sessionStorage四、http1. http常见的状态码有哪些2. http常见的header有哪些3. 什么是RestfulAPI4. 描述一下http的缓存机制5. https 一、手写ajax请求 …...

林江院长:让斜视的孩子改“斜”归正,“正视”未来
读写时跳行、不敢和别人对视、拍照时不敢看镜头......这些不便是不少斜视患儿每天都在经历的日常。 斜视是目前儿童常见的眼科疾病之一,该眼病不仅给孩子的外在形象带来影响,更重要的是会影响双眼视功能及身心健康,其危害不容小觑。 7岁男孩晓…...
windows系统Mysql备份脚本
一.背景 用的windows server 2019服务器,mysql8.0.34,还是应该每天备份一下。以前做了很多次,主要是带了2个徒弟,还是要写出来。 二.备份脚本 chcp 936 set date_tmp%date:~0,10% set datetime%date_tmp:/%%time:~0,2%%time:~3,…...

localStorage、sessionStorage、vuex区别和使用感悟
一、介绍及区别 localStorage的生命周期是永久;不手动在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。 sessionStorage的生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭,那么所有通过sessionStorage存…...

Linux用户提权
新建用户 用root账户修改文件,添加信任用户 使用sudo提权,可以使用 **root删除新建账户**...

ZooKeeper 安装
ZooKeeper 的安装包括单机模式安装,以及集群模式安装。 单机模式较简单,是指只部署一个 zk 进程,客户端直接与该 zk 进程进行通信。在开发测试环境下,通常来说没有较多的物理资源,因此我们常使用单机模式。 当然在单…...

Realm Management Extension领域管理扩展之安全状态
RME基于Arm TrustZone技术。TrustZone技术在Armv6中引入,提供以下两个安全状态: 安全状态(Secure state)非安全状态(Non-secure state)以下图表显示了在AArch64中的这两个安全状态以及通常在每个安全状态中找到的软件组件: 该架构将在安全状态运行的软件与在非安全状态运…...

统计学-R语言-2.2
文章目录 前言导入.RData文件方式1方式2方式3 导入程序包方式一方式二 总结 前言 本篇文章是将上篇得软件安装完,对其部分功能进行介绍。 导入.RData文件 在我们日常练习时会有.RData文件导入,并对其进行分析,下面是两种方导入.RData文件。…...

Windows 项目从0到1的部署
目录 一. 安装jdk 1.1 安装jdk 1.2 配置jdk的环境配置jdk 1.3 配置成功 二. 配置tomcat 2.1 启动tomcat 2.2 防火墙设置 三. 安装MySQL 3.1 安装步骤 3.2 内部连接 3.3 外部连接 四. 部署项目 4.1 项目部署 4.2 修改mysql的用户密码 一. 安装jdk 这里给大家准备好了jdk和…...

基于SSM的戏剧推广网站的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue、HTML 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是…...
监督学习 - 梯度提升机(Gradient Boosting Machines,GBM)
什么是机器学习 梯度提升机(Gradient Boosting Machines,GBM)是一种集成学习方法,通过将多个弱学习器(通常是决策树)组合成一个强学习器来提高模型的性能。GBM的训练过程是通过迭代,每一步都根…...

Mac M1 Parallels CentOS7.9 Install Jenkins
官网: https://www.jenkins.io/ 一、Install & Check Java Env Oracle官网下载Java: https://www.oracle.com/cn/ # 拷贝到Jenkins服务器 scp Downloads/jdk-11.0.21_linux-aarch64_bin.tar.gz root10.211.55.34:~# 解压 mkdir -p /opt/java && tar -zxvf jdk-11…...

【基于 InternLM 和 LangChain 搭建你的知识库】学习笔记
学习参考文档【基于 InternLM 和 LangChain 搭建你的知识库】 学习参考链接【书生・浦语大模型实战营第三课作业(基础进阶)】 理论 实战 收集原始数据 收集2018年-2020年几年间的优秀数学建模论文 修改脚本文件,测试文件 作业 复现课程知识库助手搭建过程 La…...
Redis面试系列-03
1. 为什么 Redis 集群的最大槽数是 16384 个? 在redis节点发送心跳包时需要把所有的槽放到这个心跳包中,以便让节点知道当前集群信息,即1638416k,在发送心跳包时使用char进行bitmap压缩后是2k(2*8 (8bit)*1024(1k)16K…...

如何结合告警丰富获取拨测失败的原因?
本期最佳实践为您揭秘: 如何使用pongo2模板语言获取指定的字符串内容如何结合告警丰富,过滤出有效的告警信息 「 背 景 」 在此前的最佳实践当中,我们为大家介绍了一个好的告警通知应该具备的条件。在一般的指标告警中,在告警信…...

学习JavaEE的日子 day12 构造方法 类的制作
Day12 需求:创建人类的对象,并操作对象 分析: 人类 - Person 属性:name、sex、age 方法:eat、sleep 场景:创建多个对象,去操作对象 //测试类:该类中有main方法,测试我们写…...

Mybatis-Plus基础学习
目录 第一章、快速了解mybatis-plus1.1)相关概念介绍1.2)为什么使用MyBatis-Plus1.3)学习过程中的疑问 第二章、 MyBatis-Plus与SpringBoot集成2.1)使用Spring Initializr创建SpringBoot项目2.2)安装Lombok插件2.3&…...

C#微信公众号HIS预约挂号系统源码
微信公众号预约挂号系统、支付宝小程序预约挂号系统主要是让自费、医保患者在手机上就能实现就医全过程,实时预约挂号、自费、医保结算,同时还可以查询检查检验报告等就诊信息,真正实现了让信息“多跑路”,让群众“少跑腿”。系统…...

MySQL基础笔记(6)函数
函数:是指一段可以直接被另一段程序调用的程序或者代码~(MySQL内置) 一.字符串函数 trim不能去除中间的空格~ select concat(jsl,1325): 执行如上的代码,返回字符串"jsl1325"。 select lower(JSL); 执行如上的代码&…...

初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(2)
🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...