【HTTP】面试题整理

HTTP:什么是队头阻塞以及怎么解决?

队头阻塞(Head-of-Line Blocking) 

        计算机网络中的一个概念,特别是在处理HTTP请求时。当多个HTTP请求被发送到一个服务器,并且这些请求被放置在一个队列中等待处理时,如果队列中的第一个请求(队头)由于某种原因(如处理时间长、等待资源等)被阻塞或延迟,那么队列中后面的所有请求都必须等待,即使它们可能不需要等待或可以被更快地处理。这种情况就被称为队头阻塞。

队头阻塞会导致网络性能和响应时间的降低,因为即使后续请求可以更快地被处理,它们也必须等待队头请求完成。

为了解决队头阻塞问题,有几种常见的方法:

  1. HTTP/2多路复用:HTTP/2通过使用多路复用(multiplexing)技术,允许在一个单一的TCP连接上并行处理多个请求和响应,从而避免了队头阻塞。HTTP/2将请求和响应拆分为更小的帧,并按优先级在TCP连接上进行交错发送。这样,即使某些帧被阻塞,其他帧也可以继续流动。
  2. 使用多个连接:在某些情况下,可以通过建立多个并行连接来绕过队头阻塞。例如,浏览器可以同时对一个网站的不同资源使用多个HTTP连接。但是,这种方法可能会增加连接建立和管理的开销,并且可能受到浏览器或服务器的限制。
  3. 优化请求顺序:虽然这不能从根本上解决队头阻塞问题,但优化请求的顺序(例如,先发送重要的或预计处理时间短的请求)可以减少其影响。
  4. 使用优先级队列:在某些情况下,可以使用优先级队列来管理请求,以便高优先级的请求可以优先得到处理。然而,这需要在服务器或中间件中实现复杂的逻辑。

        总的来说,HTTP/2的多路复用是解决队头阻塞问题的最有效方法之一,因为它从根本上改变了请求和响应在TCP连接上的处理方式。

XSS 攻击是什么 ?

        XSS 是跨站脚本攻击, Cross-site scripting 缩写。全称缩写后应是 CSS,但这样就和层叠样式表 Cascading Style Sheets 的缩写相同了,为以示区分,改用 XSS。

        XSS本质是代码注入。通过某种方式在受攻击网站中注入一些恶意代码,当用户访问该网站去触发这段脚本。

XSS攻击有哪几种类型?

        常见的XSS攻击有三种:反射型XSS攻击、DOM-based型XSS攻击、存储型XSS攻击。

        反射型 XSS

  1. 有些网页会将 url 中的一些数据作为渲染的内容去渲染。
  2. 比如我们希望用户支付完订单后跳转到一个结果页,这个页面通过 url 中的 query 字符串来显示一些内容,比如http://a.com/order?message=成功 ,我们会读取 message 的值 “成功”,将这个文案渲染到页面上。
  3. 如果这个 “成功” 被黑客替换为恶意脚本,变成 http://a.com/order?message=<script>// 恶意脚本内容</script>,且网站没做转义处理,那这个恶意脚本就会被嵌入执行。
  4. 当然这个链接很奇怪,用户在常规情况下无法访问到这样的链接。
  5. 所以攻击者就需要先组装好,然后通过一些方式诱导用户去访问它,比如通过钓鱼邮件诱导点击。

        存储型 XSS

  1. 恶意脚本被持久化保存在数据库中。
  2. 比如在自己的个人介绍的文本内容中,使用了 <script>// 这里是一些恶意代码</script>。当用户访问攻击者的个人主页时,如果服务端渲染时就会用上这段数据,没有做特别的转义处理,渲染出来的 HTML 中就带上了这个脚本,然后执行。

        DOM 型 XSS

  1. DOM 型 XSS 和反射型有点类似,但它和后端无关,是前端的问题。
  2. 前面两种类型做的是后端渲染,即用户请求 HTML 时,在服务端拼装返回完整的 HTML 返回。
  3. DOM 型 XSS 是服务端没有返回完整的 HTML,而是让前端做拼装渲染,如果没有做特殊处理,也会导致恶意代码注入。

XSS 防御

  1. 不要相信用户的数据;
  2. 使用转义,常见的是将 "'&<> 做转义。比如 React 对字符做了防 XSS 处理。源码在这里:https://github.com/facebook/react/blob/HEAD/packages/react-dom/src/server/escapeTextForBrowser.js#L51
  3. 如果做的是后端渲染,也记得做转义处理或过滤处理;
  4. 使用 CSP(内容安全策略)。Twitter 网站使用了这个;
  5. 对敏感 cookie 设置 http-only,让前端脚本无法获取到;
  6. cookie 的 SameSite 属性考虑调整为 Strict 或 Lax,让跨域 HTTP 请求的头字段无法自动携带 cookie;
  7. 进行敏感请求时,加个验证码校验;
  8. 控制内容输入长度(作用不大);

总结

  1. XSS 攻击是一种比较常见的代码注入攻击。
  2. 在平时写代码时,要注意一些数据进行渲染时,会不会导致 XSS 注入的风险,做一些必要的处理。

POST & GET的区别?

  1. GET和POST是什么?
    1. HTTP协议中的两种发送请求的方法,本质上都是在进行TCP连接; 
  2. 功能不同? 
    1. get是从服务器上获取数据。
    2. post是向服务器传送数据。
  3. 安全性不同?
    1. get安全性非常低。
    2. post安全性较高。
    3. 因为参数直接暴露在URL中,所以,GET请求不能用来传递敏感信息。
  4. GET请求在浏览器中可以被主动cache(缓存),而POST请求不会,可以手动设置。
  5. GET请求参数是通过URL进行传递的,POST请求的参数包含在请求体当中。
  6. GET请求在url中传递的参数是有长度限制的(在HTTP协议中并没有对URL的长度进行限制,限制是特定的浏览器以及服务器对他的限制,不同浏览器限制的长度不同。),POST对长度没有限制, POST传递的参数在请求。
  7. GET请求参数会完整的保留在浏览器的历史记录中,POST请求的参数不会保留。
  8. GET请求进行url编码(百分号编码),POST请求支持多种编码方式。
  9. GET请求产生的URL地址是可以被bookmark(添加书签)的,POST请求不可以。
  10. GET请求在浏览器回退的时候是无害的,POST请求会.再次提交数据。

七层网络模型?

        在互联网技术里,有两件事最为重要,一个是TCP/IP协议,它是万物互联的事实标准;另一个是Linux操作系统,它是推动互联网技术走向繁荣的基石。

        在网络编程中最重要的模型便是OSI七层网络模型和TCP/IP四层网络模型。

  1. OSI的上面四层 (应用层、表示层、会话层、传输层)为高层,为应用程序服务;
  2. OSI的下面三层(网络层、数据链路层、物理层)为低层,由操作系统支持。

 给大家横向对比下TCP/IP4层模型、5层模型和OSI七层模型的差别!

Ajax:简单&复杂请求?

简单请求满足一下三个条件的请求?

  1. 请求方法是以下三种方法之一:HEAD、GET、POST。
  2. HTTP的头信息不超出以下几种字段:
    1. Accept
    2. Accept-Language
    3. Content-Language
    4. Last-Event-ID
  3. Content-Type:只限于三个请求格式的类型
    1. text/plain
    2. multipart/form-data
    3. application/x-www-form-urlencoded

复杂请求:非简单请求就是复杂请求。

  1. 复杂请求在正式请求前都会有请求预检,在浏览器 NetWork 中可以看到有 OPTIONS 请求;用于向服务器询问 这次请求是否在服务器允许来源之内;
  2. 以及的方法是否符合我服务器设计的方法,从而做下一步的处理,
  3. 主要用于向服务器请求权限信息的。

简单请求和复杂请求的区别?

  1. 复杂请求会多发一次请求
  2. 例:我们向 3000 服务器发送 "/getdata"的get 请求,浏览器会额外发送一个"/getdata"的options请求,这个请求我们称为预请求,服务器也会做出“预响应”,预请求实际上是一种权限请求,只有预请求成功后,实际的请求才会执行,预请求也存在跨域问题哦。

预检验请求

  1. 对于 跨域 的复杂请求会进行预检请求;
  2. 预检请求是不会携带请求体和自定义的请求头; 因此对于处理复杂请求的在自定义中间件,遇到预检请求,我们需要直接放行,否则会出现非预期的结果。如果不跨域,是没有预检请求的。

复杂请求详解? 

  1. 非简单请求就是复杂请求。 复杂请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为“预检”请求(preflight)。预检请求为OPTIONS请求,用于向服务器请求权限信息。预检请求被成功响应后,才会发出真实请求,携带真实数据。axios默认请求就是application/json。
  2. ajax 请求遵循同源策略(协议、域名、端口必须一致),若突破该限制,会产生跨域行为,设置Access-Control-Allow-Origin: *,可允许客户端跨域访问。 除上述情况外,还有一种请求叫做Preflighted Request(带预检的跨域请求)。
  3. Preflighted Request在发送真正的请求前,会先发送一个方法为OPTIONS的预请求(Preflighted Request),用于试探服务端是否能接受真正的请求。如果options获得的回应时拒绝性质的,如404、403、500等状态,就会停止post、get请求的发出。
  4. 请求变成Preflighted Request的情况如下:
    1. 请求方法不是GET/HEAD/POST
    2. POST请求的Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain
    3. 请求设置了自定义的header字段
  5. 例如:如果POST请求要传输的数据为 XML文档, Content-Type为application/xml或text/xml, 则发送这个请求前会发送一个预请求,或者自定义的header字段也是一样的道理。
  6. 所以说, 在项目中ajax对后台API的调用, OPTIONS请求是没办法去掉的, 除非后台接口不再需要在请求header中设置openId 但是由于该项目中用户信息是采用的JWT的方式,所以只好作罢。
  7. 但是由于该项目在后台中自定义了请求频率限制的拦截器,例如限制同一个客户端一秒内对某一个接口只能访问1次。如果超过限制,则第二次会返回状态码500,不予处理。如果每次请求前都带着一次OPTIONS请求,则该拦截器无法正常实现功能,反正会导致大批接口调用失败的情况。
  8. 鉴于上述分析,既然前端发起请求时OPTIONS请求没有办法去除,那么是否可以考虑从后台拦截器进行改造。
  9. 如果拦截到的请求不是项目中常规的GET或者POST请求,则该拦截器直接放行。

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

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

相关文章

iview 不请求接口修改table本地数据 不刷新的本质问题以及最简单的解决方法

在日常的开发中&#xff0c;相信大家都遇到过这样的问题&#xff0c;通过请求接口&#xff0c;而后赋值table数据&#xff0c;页面都是正常的刷新渲染的&#xff0c;但是有时&#xff0c;不需要请求接口&#xff0c;只修改本地的固定数据的话&#xff0c;页面的table表格数据却…

【每日力扣】 修剪二叉搜索树与复原 IP 地址

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害。 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&am…

Git 仓库瘦身与 LFS 大文件存储

熟悉 Git 的小伙伴应该都知道随着 Git 仓库维护的时间越来越久&#xff0c;追踪的文件越来越多&#xff0c;git 存储的 objects 数量会极其庞大&#xff0c;每次从远程仓库 git clone 的时候都会墨迹很久。如果我们不小心 git add 了一个体积很大的文件&#xff0c;且 git push…

Linux系统(四)- 进程初识 | 环境变量 | 进程地址空间

~~~~ 前言冯诺依曼体系结构&#xff08;重要&#xff09;总览CPU工作方式什么是指令集&#xff1f;CPU为什么只和内存打交道&#xff08;数据交换&#xff09;&#xff1f;木桶效应&#xff1a;在数据层面的结论程序运行为什么要加载到内存&#xff1f; 进一步理解计算机体系结…

MySQL—数据库导入篇

什么是数据库&#xff1f; 数据库是干啥的&#xff1f; 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库。 MySQL属于哪一类数据库&#xff1f; MySQL是一种关系型数据库。所谓的关系型数据库&#xff0c;是建立在关系模型基础上的数据库&a…

Cesium:绘制一个 3DTiles 对象的外包盒顶点

作者:CSDN @ _乐多_ 本文将介绍如何使用 Cesium 引擎根据模型的中心坐标,半轴信息,绘制一个 3DTiles 对象的外包盒顶点。 外包盒是一个定向包围盒(Oriented Bounding Box),它由一个中心点(center)和一个包含半轴(halfAxes)组成。半轴由一个3x3的矩阵表示,这个矩阵…

Java安全基础 关键概念过关

Java安全基础 关键概念汇总 文章目录 Java安全基础 关键概念汇总前置知识1.构造器this以及包的使用2.继承3.重写/ 重载 / super4.多态5.区分和equals方法6.toString的使用7.Object的概念8.static,final,代码块static代码块final 9.动态代理10.类的动态加载1)类加载器含义&#…

卷积篇 | YOLOv8改进之C2f模块融合SCConv | 即插即用的空间和通道维度重构卷积

前言:Hello大家好,我是小哥谈。SCConv是一种用于减少特征冗余的卷积神经网络模块。相对于其他流行的SOTA方法,SCConv可以以更低的计算成本获得更高的准确率。它通过在空间和通道维度上进行重构,从而减少了特征图中的冗余信息。这种模块的设计可以提高卷积神经网络的性能。本…

如何正确从github上下载数据集等内容

文章目录 一、现象&#xff1a;二、解决方案 一、现象&#xff1a; 数据集点击下载没有反应&#xff0c;那需要怎么下载数据集呢&#xff1f; 二、解决方案 输入以下命名行&#xff0c;亲测有效 git clone https://github.com/mymusise/ChatGLM-Tuning.git

【ADF4351】使用FPGA进行SPI寄存器配置、使用FPGA计算各个频率的频点,ADF4351配置程序

简介 特性 输出频率范围&#xff1a;35 MHz至4,400 MHz 小数N分频频率合成器和整数N分频频率合成器 具有低相位噪声的VCO 可编程的1/2/4/8/16/32/64分频输出 典型抖动&#xff1a;0.3 ps rms EVM(典型值&#xff0c;2.1 GHz)&#xff1a; 0.4% 电源&#xff1a;3.0 V至3.6 V …

Selenium 自动化 —— 使用WebDriverManager自动下载驱动

上一篇文章 入门和 Hello World 实例 中&#xff0c;我们提供了一个最简单的 Selenium 上手的例子。 但是某一天&#xff0c;突然发现相同的代码居然运行报错了。这是怎么回事呢&#xff1f; 日志排查 日志中其实提示的很明显了&#xff1a;Chrome浏览器和Chrome WebDriver的…

adobe animate 时间轴找不到编辑多个帧按钮

如题&#xff0c;找了半天&#xff0c;在时间轴上找不到编辑多个帧按钮,导致无法批量处理帧 然后搜索发现原来是有些版本被隐藏了&#xff0c;需要再设置一下 勾选上就好了

day0 3r文档docker部署

3R编码 | 3R教室 - 最好的数字游民学习与交流俱乐部! (3rcd.com) window安装wsl下载不下来&#xff0c;正好有个服务器&#xff0c;就用linux吧密钥长度不匹配&#xff0c;设置一下长度即可 文档启动不成功&#xff0c;单独下载了下nginx&#xff0c;docker pull nginx:latest …

笔记本固态硬盘损坏数据恢复两种方法 笔记本固态硬盘损坏如何恢复

大家好&#xff01;今天要跟大家分享的是笔记本固态硬盘损坏数据恢复的两种方法。相信很多小伙伴都遇到过这种情况&#xff0c;电脑突然蓝屏或者死机&#xff0c;再开机后发现自己的数据不见了&#xff0c;这时候该怎么办呢&#xff1f;这可真是让人头疼。毕竟&#xff0c;我们…

PSCA复位控制集成之复位信号

组件可能支持两种基本的复位类型。 • 冷复位&#xff1a;重置组件中的所有逻辑。用作上电复位。 • 热复位&#xff1a;重置组件中的大部分逻辑。通常&#xff0c;复位的范围是所有功能逻辑。不包括在热复位中的逻辑会随组件类型而变化&#xff0c;但通常会排除诸如调试和 R…

SAP前台处理:物料主数据创建<MM01>之基础视图

一、背景&#xff1a; 终于来到了物料主数据&#xff0c;我觉得物料账是SAP最重要的一项发明&#xff0c;也一直是SAP的一项重要优势&#xff0c;物料账记录了一个个物料的生生不息&#xff1b; 本章主要讲解物料主数据和财务相关的主要内容&#xff1a;这里特别提示由于作者…

MySql安装与卸载—我耀学IT

1.MySql安装 打开下载的mysql安装文件mysql-5.5.27-win32.zip&#xff0c;双击解压缩&#xff0c;运行“setup.exe”。 选择安装类型&#xff0c;有“Typical&#xff08;默认&#xff09;”、“Complete&#xff08;完全&#xff09;”、“Custom&#xff08;用户自定义&…

日志 | 日志级别 | c/c++ | 终端显示不同的颜色

日志想必都知道 优先级从高到低依次为&#xff1a;OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL日志参考1 #define RED "\x1B[31m" #define GRN "\x1B[32m" #define YEL "\x1B[33m" #define BLU "\x1B[34m" #define MAG "…

鸿蒙4.0ArkUI快速入门(一)应用模型

ArkUI篇 应用模型Stage模型FA模型模型对比 应用模型 应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼&#xff0c;它提供了应用程序必备的组件和运行机制。 HarmonyOS先后提供了两种应用模型&#xff1a; FA&#xff08;Feature Ability&#xff09;模型&…

VSCode下使用github初步

由于各种需要&#xff0c;现在需要统一将一些代码提交搞github&#xff0c;于是有了在VSCode下使用github的需求。之前只是简单的使用git clone&#xff0c;代码提交这些用的是其他源代码工具&#xff0c;于是得学习实操下&#xff0c;并做一记录以备后用。 安装 VSCode安装 …