前端面试题 ===> 【Ajax、请求】

Ajax 面试题总结

1. 什么是Ajax,原理是什么?

  1. 定义
    • 在网页中利用XMLHttpRequest对象和服务器进行数据交互的方式称为Ajax;
      • XMLHttpRequest是Ajax的核心机制,他是IE5首先引入的,是一种支持异步请求的技术,简单来说就是JS可以及时向服务器提出请求和处理响应,而不阻塞用户,达到无刷新的效果;
  2. 原理
    • 通过XMLHttpRequest对象向服务器发异步请求,从服务器获得数据,然后利用JS来操作DOM进而更新页面;
  3. 优点
    • 最大的一点就是页面无刷新,用户体验非常好;
    • 使用异步方式与服务器通信,具有更加迅速的响应能力;
    • 基于标准化的并被广泛支持的技术,不需要下载插件;
  4. 缺点
    • Ajax不支持浏览器返回按钮;
    • 对搜索引擎的支持比较弱;
    • 安全问题:Ajax暴露了与服务器交互的细节;
    • 破坏了程序的异常机制;

2. 常见的HTTP状态码以及代表的意义

状态码意义
200请求成功
201成功请求并创建新的资源
301永久移动(请求的资源已被永久的移动到新的URL,返回信息会包括新的URL,浏览器会自动定向到新的URL,今后任何新的请求都应使用新的URL代替)
302临时重定向/临时转移(一般用来做服务器负载均衡)
304本次获取的内容是读取缓存中的数据,会每次区服务器校验
400语义有误,请求参数有误
401当前请求需要客户验证
403没有权限,禁止访问
404请求地址有误(服务器无法根据客户端提供的地址找到资源)
408请求超时
500服务器内部错误
501服务器不支持某种请求方式
503服务器超负荷
505服务器不支持请求的HTTP协议的版本,无法完成处理

3. 同源策略

  1. 同源
    • 协议、域名、端口号一致就是同源;
  2. 同源策略
    • 浏览器提供的一种安全机制,限制了从同一个源加载的文件或脚本如何与来自另一个源的资源进行交互,这是一个隔离潜在恶意文件的重要安全机制;
    • 简单来说,同源策略就是一种安全机制;

4. 跨域

  1. 跨域:
    • 协议、域名、端口号相同就是同源,只要有一个不一至就是跨域,浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是JS施加的安全限制,防止他人恶意攻击网站;
  2. 为什么会出现跨域?
    • 当下最流行的就是前后端分离的项目,就是前端项目和后端接口并不在同一域名之下,在前端项目访问后端接口的时候,就必然存在跨域问题;
  3. 跨域是哪里的限制 / 谁的行为?
    • 跨域只存在于浏览器(前端项目在访问另一个服务器后端接口的时候);
  4. 解决方式
    • 开发环境
      • 配置代理服务器,Vue 配置 devServe.proxy 去实现开发环境下的代码;
        module.exports = {devServer: {// 代理配置proxy: {// 这里的api 表示如果我们的请求地址有/api的时候,就出触发代理机制// localhost:8888/api/abc  => 代理给另一个服务器// 本地的前端  =》 本地的后端  =》 代理我们向另一个服务器发请求 (行得通)// 本地的前端  =》 另外一个服务器发请求 (跨域 行不通)'/api': {target: 'www.baidu.com', // 我们要代理的地址changeOrigin: true, // 是否跨域 需要设置此值为true 才可以让本地服务代理我们发出请求// 路径重写pathRewrite: {// 重新路由  localhost:8888/api/login  => www.baidu.com/api/login'^/api': '' // 假设我们想把 localhost:8888/api/login 变成www.baidu.com/login 就需要这么做 }},}}
        }
        
    • 生产环境
      • 反向代理:借助Nginx的反向代理来实现(后端服务实现);
      • CORS
        • 后端服务器允许跨域,后端实现;
        • 两次请求,第一次是OPTIONS请求(预检请求),第二次是根据预检请求的结果确定是否跨域以及如何跨域;
        • 原理:服务器设置Access-Control-Allow-OriginHttp响应头后,浏览器会允许跨域请求;
        • 限制:浏览器需要支持HTML5,可以支持POST、PUT的等方法;
        // 以下方式二选一
        Acccess-Control-Allow-Origin: * // 允许所有域名访问
        Access-Control-Allow-Origin: HTTP://a.com // 只允许所有域名访问
        
  5. 拓展:
    • JSONP
    • 动态创建一个script标签,利用script标签的stc属性不受同源策略限制,因为所有的src和href属性都不收同源策略限制,可以请求第三方服务器数据内容;
    • 缺点:只能发起GET请求;
  6. 开发环境的跨域会影响生产环境吗?
    • 不会,开发是开发,生产是生产,互相没有关系;

5. GET 和 POST 的区别

  1. GET 和 POST 本质上没什么区别,都是TCP;
  2. 参数可见性
    • get:参数可见;
    • post:参数不可见;
  3. 产生的TCP数据包
    • get:产生一个TCP数据包,浏览器会把http header 和 data 一并发送出去,服务器响应200 ok;
    • post:产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok;
  4. 数据传输
    • get:通过拼接url或使用cookie进行参数的传递(查询字符串);
    • post:通过body体传输参数;
  5. 缓存性
    • get:可以缓存
    • post:不可以缓存,也就是说post请求服务端都会返回一次新的内容(内容的值可能一样,但是是新的请求);
  6. 后退页面的反应
    • get:不产生任何影响;
    • post:需要重新提交请求;
  7. 传输数据大小
    • get:一般数据的传输不超过2k~4k,根据浏览器的不同,限制可能不一样,但相差不大;
    • post:传输数据的大小根据配置文件设定;
  8. 安全性
    • 原则上post肯定比get安全,毕竟参数不可见;

6. HTTP 和 HTTPS 的区别

  1. HTTPS需要申请证书,一般免费的证书很少,因而需要一定的费用;
  2. HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的SSL加密传输协议;
  3. HTTP和HTTPS使用的是完全不同的连接方式,用的端口不一样,HTTP默认端口是80,HTTPS默认端口是443
  4. HTTP的连接很简单,是无状态的,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网路协议,比HTTP协议更安全;

7. 一个页面从输入URL到页面加载显示完成,这个过程中发生了什么

  1. 浏览器查找域名对应的IP地址(DNS查询:浏览器缓存->系统缓存->路由器缓存->ISPDNS 缓存->根域名服务器);
    • DNS查询:
      • 这个过程实际上是浏览器将输入的url发送到DNS服务器进行查询,DNS服务器会返回当前查询url的IP地址;
      • 它实际上充当了一个翻译角色,实现了网址到IP地址的转换;
      • DNS解析是一个递归查询的过程;
  2. 浏览器向Web服务器发送一个HTTP请求(TCP三次握手);
  3. 服务器301重定向(从 HTTP://example.com 重定向到 HTTP://www.example.com);
  4. 浏览器跟踪重定向地址,请求另一个带www的网址;
  5. 服务器处理请求(通过路由读取资源);
  6. 服务器返回一个HTTP响应(报头中把 Content-type 设置为 ‘text/html’);
  7. 浏览器进DOM树;
  8. 浏览器发送请求获取嵌套在HTML中的资源(如:图片、音频、视频、CSS、JS等);
  9. 浏览器显示完成页面;
  10. 浏览器发送异步请求;

8. 你知道的HTTP请求方式有几种?

请求当时意义
GET请求指定的页面信息,并返回实体信息
POST向指定资源体骄傲数据进行处理请求,数据被包含在请求体中,post请求可能会导致新的资源的建立和已有资源的修改
PUT从客户端向服务器传送的数据取代指定的文档的内容
DELETE请求服务器删除指定页面
OPTIONS允许客户端查看服务器的性能
PATCH实体中包含一个表,表中说明与该URL所表示的原内容的区别
HEAD类似于get请求,只不过返回的响应中没有具体内同,用于获取报头
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
TRACE回显服务器收到的请求,主要用于测试或诊断
MOVE请求服务器将指定的页面移至另一个网络地址
COPY请求服务器将指定的页面拷贝至另一个网络地址
LINK请求服务器建立链接关系
UNLINK断开链接关系
WRAPPED允许客户端发送经过封装的请求
LOCK允许用户锁定资源,比如可以再编辑某个资源时将其锁定,以防别人同时对其进行编辑
MKCOL允许用户创建资源
Extension-mothed在不改动协议的前提下,可增加另外的方法

9. HTTP缓存机制

  1. 浏览器缓存分为两种:
    • 强缓存:
    • 协商缓存;
  2. 浏览器加载一个页面的简单流程如下:
    • 浏览器先根据这个资源的http头信息来判断是否命中强缓存,如果命中则直接加载缓存中的资源,并不会将请求发送到服务器;
    • 如果未命中强缓存,则浏览器会将资源加载请求发送到服务器,服务器来判断浏览器本地缓存是否失效,若可以使用,则服务器并不会返回资源信息,浏览器继续从缓存中加载资源;
    • 如果未命中协商缓存,则浏览器会将完成的资源返回给浏览器,浏览器加载新资源,并更新缓存;

10. 什么是TCP连接的三次握手?

  1. TCP是因特网中的传输层协议,使用建立连接,完成三次握手,与服务器开始传送;
  2. 第一次握手:
    • 建立连接时,发送包(syn = j)到服务器,并进入等待状态,等待服务器确认;
    • SYN:同步序列编号;
  3. 第二次握手:
    • 收到SYN包,必须确认客户的SYN(sybn = j + 1),同时自己也发送一个SYN包(syn = k),即SYN + ACK包,此时服务器进入等待状态;
  4. 第三次握手:
    • 客户端收到服务器的SYN + ACK包,向服务器确认包ACK(ack = k + 1),此包发送完毕,客户端和服务器进入(TCP连接成功)状态,完成三次握手;

11. 为什么TCP连接需要三次握手四次挥手

  • TCP协议是全双工通信,这意味着客户端和服务器都可以向彼此发送数据,所以关闭连接是双方都需要确认的共同行为,假设是三次握手时,首先释放了客户端到服务器方向的连接,此时TCP连接处于半关闭状态,这时客户端不能向服务器发送数据,而服务器还是可以向客户端发送数据,如果此时客户收到了服务器的确认报文段后,就立即立即发送一个确认报文段,这会导致服务器向客户端还在发送数据时连接就被关闭,这样会导致客户没有完整收到服务器所发的报文段;

12. 介绍一下WebSocket

  • websocket是一种网络通信协议,是HTML5开始提供的一种在单个TCP连接上进行全双工通信的协议;
  • 这个对比着HTTP协议来说,HTTP协议是一种无状态的、无连接、单向的应用层协议,通信请求只能由客户端发起,服务端对请求做出应答处理;
  • HTTP协议无法实现服务器主动向客户端发消息,webSocket链接允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立的连接将数据推送到另一端;
  • webSocket只需建立一次连接,就可以一直保持连接状态;
  • 连接⽅式也⾮常简单,new WebSocket(后台地址)实例化⼀个socket对象,其中open建⽴连接,send可以发送消息,onmessage可以接收消息,close可以关闭连接

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

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

相关文章

ABB IORR2100-30拍合式接触器

ABB的IORR2100-30拍合式接触器是一款高性能的电气元件,主要用于控制和保护电路。这种接触器具有快速响应、高可靠性以及良好的耐久性等特点,广泛应用于工业自动化、电力系统和电机控制等领域。 拍合式接触器的设计使其能够在需要时迅速接通或断开电路。当…

45. 跳跃游戏 II(力扣LeetCode)

文章目录 45. 跳跃游戏 II贪心 45. 跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j <…

《次神光之觉醒》游戏简单拆解

文章目录 一、 介绍二、 游戏拆解图三、 部分模块拆解1.主界面关卡制放置挂机2.养成升级战斗属性值角色养成装备养成技能养成天赋养成藏品养成契约养成宠物养成挖矿养成 3.副本4.任务5.pvppvp竞技场锦标赛黄金矿工锦标赛公会营地 6.社交游戏圈世界频道好友系统 一、 介绍 《次…

谈谈Darknet53为啥这么难训练

在我使用Imagenet2012对Darknet53进行预训练的时候&#xff0c;往往训练到一半&#xff0c;就会出现过拟合&#xff0c;导致无法继续向下训练&#xff0c;尝试了很多方法&#xff0c;最后发现问题出现在下图红框的部分。 得出这个结论是因为当我使用Resnet中&#xff0c;包含有…

Java集合基础知识总结(绝对经典)

List接口继承了Collection接口&#xff0c;定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理&#xff0c;还添加了面向位置的操作。 实际上有两种list&#xff1a;一种是基本的ArrayList&#xff0c;其优点在于随机访问元素&#xff0c;另一种是更强大的L…

利用HubSpot出海CRM和人工智能技术提升出海业务的效率和效果

在当今数字化时代&#xff0c;智能化营销已经成为企业获取客户和扩大市场份额的关键策略。特别是对于出海业务而言&#xff0c;利用智能化营销技术来应对不同文化、语言和市场的挑战&#xff0c;已经成为企业竞争的关键优势。今天运营坛将带领大家探讨如何利用HubSpot CRM和人工…

大模型在智能推荐系统中的应用与挑战

摘要&#xff1a; 本文将深入探讨大模型在智能推荐系统中的应用与挑战&#xff0c;并详细介绍实现智能推荐系统的关键步骤。文章结构将包括引言、基础知识回顾、核心组件、实现步骤、代码示例、技巧与实践、性能优化与测试、常见问题与解答、结论与展望以及附录。 引言&#…

技术方案|某工业集团PaaS容灾方案

在当今快速发展的数字化时代&#xff0c;业务的连续性和稳定性已成为企业核心竞争力的重要组成部分。然而&#xff0c;由于各种原因&#xff0c;企业常常面临着数据丢失、系统瘫痪等潜在风险。因此&#xff0c;制定一套科学、高效的容灾方案至关重要。本文将围绕某全球领先的工…

css实现梯形?

HTML: <div class"box"></div> CSS: .box{width:50px;height:0;border-bottom:50px solid pink;border-left:50px solid #fff;border-right:50px solid #fff; } 效果&#xff1a;

opencv dnn模块 示例(25) 目标检测 object_detection 之 yolov9

文章目录 1、YOLOv9 介绍2、测试2.1、官方Python测试2.1.1、正确的脚本2.2、Opencv dnn测试2.2.1、导出onnx模型2.2.2、c测试代码 2.3、测试统计 3、自定义数据及训练3.1、准备工作3.2、训练3.3、模型重参数化 1、YOLOv9 介绍 YOLOv9 是 YOLOv7 研究团队推出的最新目标检测网络…

22.4 docker

22.4 docker 1. docker简介2. docker架构3. 容器和仓库4. Docker安装:基于Linux5. docker容器生成与运行5.1 docker换源5.2 启动容器5.3 docker search6. docker基于redis演示6.1 run -i -t:终端运行redis容器(不推荐)6.2 访问docker正在运行容器6.3 -d:后台运行redis容器6.4 停…

IDEA开启Run Dashboard

1、Run Dashboard是什么&#xff0c;为什么要使用 Run Dashboard 是 IntelliJ IDEA 中的一个工具窗口&#xff0c;用于管理和监视项目中正在运行的应用程序和配置。它提供了一种集中管理运行和调试过程的方式&#xff0c;可以让开发人员更方便地查看和控制正在运行的应用程序。…

2061:【例1.2】梯形面积

时间限制: 1000 ms 内存限制: 65536 KB 提交数:201243 通过数: 79671 【题目描述】 在梯形中阴影部分面积是150平方厘米&#xff0c;求梯形面积。 【输入】 (无&#xff09; 【输出】 输出梯形面积&#xff08;保留两位小数&#xff09;。 【输入样例】 &#xff…

数据结构-链表(二)

1.两两交换列表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2…

Java学习笔记------常用API(三)

BigInteger 在Java中&#xff0c;整数类型有四种类型&#xff1a;byte&#xff08;一个字节&#xff09;、short&#xff08;2个字节&#xff09;、int&#xff08;四个字节&#xff09;、long&#xff08;8个字节&#xff09; 超出取值范围上面类型无法使用&#xff0c;这时…

Docker学习之容器管理(超详解析)

容器相关命令&#xff1a; 容器操作&#xff1a; 启动容器 方法1:先创建一个容器&#xff1a;docker create 镜像名再启动容器&#xff1a;docker start 容器名(不推荐) [rootlocalhost ~]# docker create -it myubuntu:18.04 //创建容器 7bc99c9ea102ab49cc400437824a954949…

白酒:生产过程的智能化与自动化升级改造

在当今的工业生产中&#xff0c;智能化与自动化已成为提进一步率、品质和竞争力的关键因素。云仓酒庄紧跟时代步伐&#xff0c;对豪迈白酒的生产过程进行了一系列智能化与自动化升级改造&#xff0c;旨在提升生产效率、确保产品质量的同时&#xff0c;降低生产成本。 首先&…

Express学习(四)

使用Express写接口 创建基本的服务器 创建API路由模块 编写GET接口 编写POST接口 CORS跨域资源共享 什么是CORS CORS由一系列HTTP响应头组成&#xff0c;这些HTTP响应头决定浏览器是否阻止前端JS代码跨域获取资源。浏览器的同源安全策略默认会阻止网页“跨域”获取资源。但如…

数据结构和算法:栈与队列

栈 栈 &#xff08;stack&#xff09;是一种遵循先入后出逻辑的线性数据结构 把堆叠元素的顶部称为“栈顶”&#xff0c;底部称为“栈底”。 将把元素添加到栈顶的操作叫作“入栈”&#xff0c;删除栈顶元素的操作叫作“出栈”。 栈的常用操作 /* 初始化栈 */ stack<int&g…

MySQL实战45讲

MySQL的逻辑架构 大体来说&#xff0c;MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖 MySQL 的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函数等&…