浏览器请求队列机制-请求为什么会阻塞

三、解决Spring MVC拦截器导致静态资源访问失败(基于java注解配置) 前言 对于这个问题,我们准备了以下三种解决方案: 1、静态资源统一交由Servlet容器直接处理; 2、静态资源统一交由Spring MVC框架间接处理,再转交给Servlet容器处理; 3、静态资源统一交由Spring MVC框架直接处理; 从这3种解决方案中,处理静态资源的方式可以分为Servlet容器处理和Spring MVC框架处理。在这里要说明的是,只要静态资源的请求经过Spring MVC框架的大门,如果不做额外的配置,就必然会跟拦截器扯上关系。 解决方案1: 静态资源统一交由Servlet容器 阅读详情
AI摘要

本文深入探讨了浏览器请求机制,特别是针对并发请求的处理方式。解释了不同浏览器对同一域名下的并发连接数限制,并通过测试验证了请求队列的存在及其影响。提出了通过增加域名出口和设置请求超时来优化解决方案。

前言

最近遇到一个问题,我1个站点链接2个后端服务,但1个后端服务有问题,导致访问超时,但请求接口都是分开的。自认为一个服务站点请求超时,不会影响到另外一个请求的,但不是。全部请求都发不出去。为什么呢?是不是浏览器有请求机制管理?

正常情况前端站点都是对应一个服务的,如果前面一个请求有问题,那么后面一个请求访问不下去也正常。请求都是瀑布型一个请求接一个请求有关联的。所以不了解也没什么问题。但多个后端服务才需要谨慎这点。

准备资料

浏览器并发机制

这是一个历史问题:在浏览器刚刚流行的时候,大部分用户是通过拨号来上网,由于受当时的带宽条件的限制,无法使得用户的同时多个请求被处理。同时,当时的服务器的配置也比现在差很多,所以现在每个浏览器的连接数的大小也是有必要的。浏览器默认对同一域下的资源,只保持一定的连接数,阻塞过多的连接,以提高访问速度和解决阻塞问题。不同浏览器的默认值不一样,对于不同的HTTP协议其值也不一样,参看下表:

BrowserHTTP/1.1HTTP/1.0
IE 6,724
IE 866
Firefox 228
Firefox 366
Safari 3,444
Chrome 1,26?
Chrome 344
Chrome 4+6?
iPhone 24?
iPhone 36?
iPhone 44?
Opera 9.63,10.00alpha44
Opera 10.51+8?

信息来源:http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/

测试工具

ToolName
浏览器chrome
监控请求charles

请求

TypeRequestajax timeout
success requestautoLogin.dotrue
error requestmobileCaptcha.dofalse

复现问题

1.同时请求15个请求,在Chrome 浏览器中,看到chrome network中有15个请求,而通过charles获取发送请求中,只有6个。这个和上面数据吻合。

这里写图片描述
这里写图片描述


2.而当一个成功/失败后才会执行下一个请求。

这里写图片描述


3.如果当前发送一个,正常请求。那会如何?

如下图:只要队列里面还有请求,在排队。那么新添加进去的请求,就必须排队。
ps:charles中没有显示autoLogin.do的请求发送。
这里写图片描述


4.那么ajax timeout作用

那么ajax,是定义$.ajax这个创建时间起算10秒后,就会中断请求。因此下图显示【未知网络错误】(没发送出去当然未知网络错误),并且charles中没有出现请求。
这里写图片描述


5.那么如果队列完毕后,再添加一条能成功发送的请求呢?

如下图:是正常执行成功。因为队列已经空了,新添加的请求可以马上执行。
这里写图片描述

总结

这测试证明了浏览器请求是有队列情况,而且在ios手机上并行数目更少4,这也导致了如果有4个请求同时超时就会阻塞。后面的请求就无法发送出去。

解决办法

一.服务对应域名-增加出口

浏览器是限制一个域名同时发送N个请求,但如果是2个域名都同时请求。
那么最大发送请求数 = 域名数目 * 浏览器最大并行请求数;
如chrome最大发送请求数:12=2*6。
就是2个服务的站点分出去,谁阻塞就找谁服务。
跨域建议使用CORS技术或者副域名相同进行跨域(a.ok.com,b.ok.com)*.ok.com 都可以进行跨域。


二.全部请求设置timeout超时访问时间

加上timeout就会按timeout时间清除队列。保持队列定时清空,就可以发出请求。

主服务设置timeout:10000
副服务设置timeout:8000
主服务和副服务并行:主服务成功;
主服务比副服务快:主服务成功;
主服务比副服务慢:主服务成功;
就算同时100个请求,请求都是按照timeout时间机制。

按时间来做瀑布流使整个站点维持规范,方便请求管理。

浏览器增加并行链接数方法

http://www.cnblogs.com/mmmjiang13/archive/2011/08/09/2131637.html

浏览器 - 事件循环机制详解 浏览器进程模型,渲染主线程,事件循环 阅读详情

相关推荐

浏览器运行机制:事件循环与任务队列的生存法则(3)

在 Chrome 团队 2022 年的性能报告中,合理使用事件循环机制的应用比传统实现平均提升了 43% 的交互响应速度。这种提升不是魔法,而是对浏览器运行机制的深刻理解与合理应用的结果。记住,每个事件循环周期都是与用户的约定,守约者得天下。2009 年的 Chrome 浏览器性能测试显示,当时主线程执行 500ms 以上的任务就会导致 60% 的用户认为页面卡顿。想象你正坐在银行的唯一服务窗口前办理业务,身后排着长长的队伍。这就是 JavaScript 在浏览器中的真实处境——

caishuangxi111的博客 880

前端请求队列,解决多个请求同时请求一个接口导致阻塞的问题

但是在实际测试过程中,发现每一个vue文件进入到queryEchartsData后,在执行到getData的时候就不在往下走,而是跳转到下一个vue文件进入queryEchartsData方法,当所有vue文件都进入过queryEchartsData方法后,才会再继续执行getData后面的内容,无语,这个也行不通啊…总归是要解决,最后通过不停的喂ChatGPT,终于是找到了解决办法,使用请求队列和限流,实现一个请求队列,控制并发请求的数量,避免同时发起过多的请求。

qq_34337333的博客 4373

【新手必看】蓝牙的HOGP和HID、GATT有什么区别和联系

让新手宏观了解蓝牙HOGP、HID、GATT这三个协议的区别和联系

qq_51976334的博客 1565

浏览器并发请求数以及解决办法

页面卡顿,需要好长一段时间才能加载完成,除了优化本身,还需要注意浏览器的并发数...

xzhlg57656的博客 1万+

Proteus+汇编+8086电子时钟实战:从框架搭建到中断驱动的核心实现

本文详细介绍了使用Proteus仿真软件和8086汇编语言实现电子时钟的完整过程。从程序框架搭建、内存分段模型理解,到核心的8259中断控制器配置与编程,再到中断服务程序编写和数码管动态扫描显示驱动,系统阐述了底层软硬件协同开发的核心原理与实战步骤。该项目是深入理解计算机中断机制和汇编语言编程的绝佳实践。

weixin_29189381的博客 413

MuJoCo新手必看:5分钟搞定你的第一个机器人仿真(附Python代码)

本文为零基础新手提供了一份详尽的MuJoCo物理仿真引擎入门指南。从环境搭建、MJCF模型文件解析,到编写Python控制代码,手把手教你5分钟内创建并运行第一个机器人仿真。内容涵盖双摆模型控制与自定义四轮小车构建,帮助你快速掌握这一高性能开源工具,迈出机器人学与强化学习仿真的第一步。

weixin_29032489的博客 653

生产环境请求阻塞,系统瘫痪

原因:阻塞的线程导致系统卡死的原因并不是因为线程数量过多,而是因为阻塞的线程占用了系统资源,导致其他线程无法正常运行。如果系统中有很多阻塞的线程,这些线程会一直占用CPU资源,导致其他线程无法正常运行。为了避免这种情况,可以考虑使用线程池、异步调用等技术来管理线程,避免阻塞线程导致系统卡死的情况发生。3、异步调用:可以使用异步调用,将请求放到队列,由专门的线程处理队列中的请求,避免执行线程阻塞。在调用某个接口时,如果这个接口超时了,线程会阻塞等待结果,这个阻塞的线程会导致系统卡死。

xumiaojava的博客 635

LPC546xx USB接口VBUS阈值设计:从原理到实践,解决冷启动与可靠性问题

在嵌入式USB接口设计中,VBUS信号不仅是电源线,更是设备连接检测与电源管理的核心。其电压阈值直接决定了USB物理层(PHY)能否正确识别主机并建立有效会话。理解VBUS的会话有效电压(Votg_sess_valid)与PHY有效电压(VBUS_valid)等关键参数,是确保接口稳定性的基础。这些参数影响着设备枚举的成功率、通信稳定性以及长期可靠性。在工程实践中,尤其是对于集成PHY的微控制器如NPC LPC546xx系列,VBUS的连接方案(直接连接或通过稳压器)需要根据设备供电模式(自供电/总线供电)

weixin_30915275的博客 399

同一用户同域访问时浏览器会以队列形式来访问access.log

今天做采集测试时发现个问题。就是采集时,由于数据较多所以请求的响应时间会很长,如打开采集a.com/caiji_a这时我再打开另一个请求a.com/caiji_b结果发现:第二次请求要等第一次请求结束后才会被发送查看apache的access.log日志会发现确实没有收到请求,所以认定是被浏览器限制了。再新开浏览器,发送b请求,是可以被正常响应的。再由些断定是浏览器限制问题。ps:查看apache

webnoties的专栏 991

系统安装、qt配置、安装pcie驱动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 安装Linux系统指定:ununtu20.04并配置相关软件环境 前言 提示:这里可以添加本文要记录的大概内容: ununtu20.04、Qt 5.9.0、pcie驱动 提示:以下是本篇文章正文内容,下面案例可供参考 一、安装系统 制作系统盘(win10),在开机时按相应键进入BIOS,(华硕需要先改配置启动->CSM->开启->第一个选项选第一个或第二个),等待即可 进入后按照https://www.sysgeek.

weixin_44832804的博客 2204

第4章 部署负载均衡 Keepalived + HAProxy

本章在所有 Master 节点部署 Keepalived + HAProxy,为 kube-apiserver 提供高可用入口。Keepalived 实现 VIP(192.168.3.59)漂移,HAProxy 轮询转发请求至三个 Master 的 6443 端口(监听 6444 避免冲突)。健康检查脚本连续 5 次失败则停止 Keepalived,触发 VIP 自动切换。本章还包含配置详解、日常运维和问题排查。

幸福街--linux技术分享 120

Face Analysis WebUI入门必看:Gradio队列机制配置防止高并发请求阻塞

本文介绍了如何在星图GPU平台上自动化部署人脸分析系统 (Face Analysis WebUI) 镜像,并重点讲解如何配置Gradio队列机制以解决高并发请求阻塞问题。通过启用队列,该人脸分析应用能有序处理多人同时上传的图片请求,确保系统稳定运行,适用于多人同时进行人脸属性分析、检测等场景。

weixin_42599558的博客 485

Oracle 查看 rman 备份情况 SQL 语句

每天一个 DBA 小知识,助你更进一步!

LuciferLiu_DBA 3117

Js中for循环的阻塞机制

Js阻塞机制,跟Js引擎的单线程处理方式有关,每个window一个JS线程。所谓单线程,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码。 由于浏览器是事件驱动的(Event driven),因此浏览器中很多行为是异步(Asynchronized)的,很容易有事件被同时或者连续触发。当异步事件发生时,会创建事件并放入执 行队列中,等待当前代码执行完成之后再执行这些代码,如鼠标点击事件发生、定时器触发事件发生、XMLHttpRequest完成回调这些事件,都会被放 入执行队列中等待。 关于Js的阻塞

u011927449的博客 1430

大模型角色提示词写得再严密,也能被绕过?我用攻击者思维把自己吓了一跳!

很多人以为提示词是“只要写清楚了,模型就能理解”,但实际上——模型并不具备严格的规则意识,它只是在预测下一句话。所以我们必须从“攻防”角度出发,设计更强的防护机制。我这次就是亲身踩坑,用红队思维模拟攻击,才意识到原来提示词注入这么容易中招。你如果也在做 AI 应用、角色系统、提示词驱动的功能,建议你也用类似方式测试一下,不然被绕了都不知道。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1026

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【JavaEE】多线程 -- 阻塞队列

方案2: 我负责擀饺子皮, 小美和千均负责包饺子. 我把擀好的饺子皮放在簸箕上. 小美和千均用的时候就从簸箕上拿. 他们两个不用和我争夺擀面杖, 他们的任务是只是包饺子, 不需要擀饺子皮. 这个行为他们他们就可以不用花费很多时间等我, 因为我只是擀饺子皮, 不用包饺子. (和上个方案对比)方案1: 一个擀面杖, 我和小美和千均. 在桌子上谁先拿到擀面杖, 就先做出一个饺子皮. 让后包饺子. 所以我们三个要。阻塞队列的⼀个典型应⽤场景就是 “⽣产者消费者模型”. 这是⼀种⾮常典型的开发模型.

apple_61439616的博客 848

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JS如何利用阻塞机制实现停留几秒sleep

//第一种,使用while循环 function sleep(delay) { var start = (new Date()).getTime(); while((new Date()).getTime() - start < delay) { continue; } } //或者使用for循环 function sleep(delay) { ...

zhang5207892的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

一文了解JAVA中同步、异步、阻塞和非阻塞

量力而行:根据业务特点进行技术选型,业务量小尽量避免使用异步。有所为,有所不为数据说话:异步时一定要进行必要的压力测试先找出系统的关键点:优化单体系统内的性能,再通过整体系统分解来全局优化根据团队和项目的特点选择框架。

林在闪闪发光的博客 3246

浏览器 事件循环 从 宏队列和微队列 到 延时队列、交互队列、微队列 | js 执行机制 异步程序

同步程序执行完,再执行异步。会出现定时器不准的情况js 会阻塞渲染 是因为它们运行在同一个线程上JS 是单线程。因为js只能运行在浏览器的渲染主线程中,而渲染主线程只有一个,而渲染主线程承担着非常的多的事情 , 渲染页面 , 执行js啥啥的 都在里面执行浏览器的渲染进程 采用何种方式处理定时器任务、交互任务,任务执行顺序的依据 —— 事件循环。

海胆的博客 1676

一篇文章快速搞懂JavaScript事件循环、任务队列、同步异步和阻塞非阻塞

事件循环可以理解为我们编写的JavaScript代码和浏览器或者node之间的桥梁,桥梁之间他们通过回调函数进行沟通。无论是我们的文件IO,数据库操作,定时器,子进程,在完成对应的操作之后都会将结果和回调函数放到事件循环(任务队列)中去。事件循环会不断的从任务对列中取出对应的事件(回调函数)放入函数的调用栈中执行。

阿花的博客 4068

浏览器的事件循环机制

浏览器的事件循环机制

2203_75479159的博客 1665

超给力的Js中for循环的阻塞机制

Js阻塞机制,跟Js引擎的单线程处理方式有关,每个window一个JS线程。所谓单线程,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码。 由于浏览器是事件驱动的(Event driven),因此浏览器中很多行为是异步(Asynchronized)的,很容易有事件被同时或者连续触发。当异步事件发生时,会创建事件并放入执 行队列中,等待当前代码执行完成之后再执行这些代码,如鼠标点击事件发...

qq_38122518的博客 2535

详解事件循环与浏览器渲染机制

摘要:浏览器采用多进程架构,渲染主线程通过事件循环机制处理HTML解析、样式计算、布局等任务。异步机制避免主线程阻塞,任务按优先级在微队列、交互队列等不同队列中调度。JS执行会阻碍渲染,因其与渲染任务共享主线程。渲染流程包含解析、样式计算、布局、分层等阶段,最终由合成线程和GPU完成绘制。transform效率高因其仅影响合成阶段,不涉及主线程。reflow是布局重计算,repaint是绘制指令更新,两者均影响性能。

2303_80556719的博客 1076

同步,异步,阻塞,非阻塞,异步加回调机制,线程队列,event事件

1. 同步,异步,阻塞,非阻塞, 站在任务发布的角度: 同步:任务发出去之后,等待结果,直到这个任务最终结束后,返回结果,再发步下一个任务. 异步:所有任务同时发出,不会在原地等待结果返回 程序运行中表现得状态:阻塞.运行,就绪 阻塞:程序遇到IO阻塞,程序遇到IO立马会停止(挂起),cpu马上切换,等IO结束后再执行 非阻塞:程序没有IO或者遇到IO通过某种手段让CPU去执行...

weixin_30698297的博客 157

浅析浏览器中JavaScript中的线程、阻塞与事件

单线程世界里如何处理大量并发任务而不阻塞主线程的执行在做JavaScript开发时显得尤为重要。不过这不是今天的主题。既然浏览器中常常因为滥用JavaScript的事件而导致主线程阻塞,那我们就先来看看客户端JavaScript中的线程。 线程的阻塞 setTimeout 和 setInterval是JavaScript中的两个定时器,指定一定时间过后触发某某动作,常用于JavaScript制...

oYuLian的博客 1987

JavaEE 初阶(11)——多线程9之“阻塞队列”

本篇主要是一些“阻塞队列”的相关知识,讲解了阻塞队列在“生产者消费者模型”中的应用

2301_80243321的博客 2992
上一篇: 介绍国内外CMS系统
下一篇: Mixed Content混合内容错误 Iframe Http页面无法访问
JarunWang
博客等级 码龄18年 57粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值