当前位置: 首页 > news >正文

细讲一个 TCP 连接能发多少个 HTTP 请求(一)

一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。但是你有没有想过,收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?

要搞懂这个问题,我们需要先解决下面五个问题:

  1. 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?

  2. 一个 TCP 连接可以对应几个 HTTP 请求?

  3. 一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?

  4. 为什么有的时候刷新页面不需要重新建立 SSL 连接?

  5. 浏览器对同一 Host 建立 TCP 连接到数量有没有限制?

先来谈谈第一个问题:现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?

在 HTTP/1.0 中,一个服务器在发送完一个 HTTP 响应后,会断开 TCP 链接。但是这样每次请求都会重新建立和断开 TCP 连接,代价过大。

所以虽然标准中没有设定,某些服务器对 Connection: keep-alive 的 Header 进行了支持。意思是说,完成这个 HTTP 请求之后,不要断开 HTTP 请求使用的 TCP 连接。

这样的好处是连接可以被重新使用,之后发送 HTTP 请求的时候不需要重新建立 TCP 连接,以及如果维持连接,那么 SSL 的开销也可以避免,两张图片是我短时间内两次访问网站的时间统计:

头一次访问,有初始化连接和 SSL 开销

初始化连接和 SSL 开销消失了,说明使用的是同一个 TCP 连接

持久连接:既然维持 TCP 连接好处这么多,HTTP/1.1 就把 Connection 头写进标准,并且默认开启持久连接,除非请求中写明 Connection: close,那么浏览器和服务器之间是会维持一段时间的 TCP 连接,不会一个请求结束就断掉。

所以第一个问题的答案是:默认情况下建立 TCP 连接不会断开,只有在请求报头中声明 Connection: close 才会在请求完成后关闭连接。

第二个问题:一个 TCP 连接可以对应几个 HTTP 请求?

了解了第一个问题之后,其实这个问题已经有了答案,如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。

在传统的HTTP/1.0协议中,每次HTTP请求都需要单独建立一个TCP连接,请求完成后立即关闭连接,这样导致了在多次请求时产生了较大的开销。为了解决这个问题,HTTP/1.1引入了持久连接的概念。

持久连接通过在TCP连接上发送多个HTTP请求来提高性能和效率。当一个HTTP请求完成后,连接并不立即关闭,而是保持打开状态以便后续请求继续使用。这样可以避免了建立和关闭连接所带来的额外开销。在这种连接上,可以连续地发送多个HTTP请求和响应,通过带有Connection: keep-alive头部字段的报文来指示需要保持连接打开。

使用持久连接可以减少请求的延迟和网络负载,提高响应速度和吞吐量。然而,需要注意的是,服务器可以根据策略来决定是否保持连接打开还是在每个请求后关闭连接。另外,HTTP/2和HTTP/3等协议还引入了更先进的多路复用技术,进一步优化了并行请求的传输和性能。

相关文章:

细讲一个 TCP 连接能发多少个 HTTP 请求(一)

一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。但是你有没有想过,收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建…...

了解 CVSS:通用漏洞评分系统的应用

漏洞威胁管理至关重要,因为网络犯罪是一种持续存在的全球风险。网络犯罪分子愿意利用软件中的任何漏洞来访问网络和设备。对使用该软件的软件开发人员和组织的影响可能很严重。用户必须处理攻击的结果,例如赎金或数据盗窃,并且还可能面临法律…...

Xilinx FPGA电源设计与注意事项

1 引言 随着半导体和芯片技术的飞速发展,现在的FPGA集成了越来越多的可配置逻辑资源、各种各样的外部总线接口以及丰富的内部RAM资源,使其在国防、医疗、消费电子等领域得到了越来越广泛的应用。当采用FPGA进行设计电路时,大多数FPGA对上电的…...

前端:地图篇(一)

1、前言 在很多的出行程序中,都会使用到地图这一个功能,在实际的开发中我们也不会去开发一个自己的地图模型。如果自己开发一个地图模型,那么需要投入的成本、人力都是非常巨大的。所以我们很多网站和APP中使用的都是第三方的接口和JS&#…...

刷题笔记 day6

力扣 57 和为s的两个整数 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> v;int i 0 , j nums.size()-1;while(i < j){if(nums[i] nums[j] > target){--j;}else if(nums[i] nums[j] < target){i…...

Drools用户手册翻译——第四章 Drools规则引擎(十一)复杂事件处理(CEP)的属性更改设置和监听器

甩锅声明&#xff1a;本人英语一般&#xff0c;翻译只是为了做个笔记&#xff0c;所以有翻译错误的地方&#xff0c;错就错了&#xff0c;如果你想给我纠正&#xff0c;就给我留言&#xff0c;我会改过来&#xff0c;如果懒得理我&#xff0c;就直接划过即可。 事实类型的属性…...

[数据分析与可视化] Python绘制数据地图4-MovingPandas入门指北

MovingPandas是一个基于Python和GeoPandas的开源地理时空数据处理库&#xff0c;用于处理移动物体的轨迹数据。它提供了一组强大的工具&#xff0c;可以轻松地加载、分析和可视化移动物体的轨迹。通过使用MovingPandas&#xff0c;用户可以轻松地处理和分析移动对象数据&#x…...

基于SpringBoot+Vue的MOBA类游戏攻略分享平台设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…...

Linux sed 命令详解

Linux sed&#xff08;Stream Editor&#xff09;是一种强大的文本处理工具&#xff0c;它在命令行中执行对文本进行搜索、替换和编辑等操作。sed的设计理念是按行处理文本&#xff0c;可以将输入文本逐行读取并应用指定的操作&#xff0c;然后输出结果。 sed命令有多种选项和…...

算法通关村——如何使用中序和后序来恢复一棵二叉树

通过序列构造二叉树 给出以下三个二叉树遍历的序列&#xff1a; (1) 前序: 1 2 3 4 5 6 8 7 9 10 11 12 13 15 14 (2) 中序: 3 4 8 6 7 5 2 1 10 9 11 15 13 14 12 (3) 后序: 8 7 6 5 4 3 2 10 15 14 13 12 11 9 1 前中序复原二叉树 所需序列 (1) 前序: 1 2 3 4 5 6 8 7 9 10 …...

TypeScript的基本类型

typescript的定义 以JavaScript为基础构建的语言是js的超集可以在任何支持js的平台执行ts 拓展了js并增加了类型Ts不能被js解析器直接执行。 TS> 编译为js 执行的还是js. js 不易于维护&#xff0c;而ts易于维护。 可提高项目的可维护性。 类似less、sass 完善的语法写 样…...

Docker实战-如何去访问Docker仓库?

导语   仓库在之前的分享中我们介绍过,它主要的作用就是用来存放镜像文件,又可以分为是公共的仓库和私有仓库。有点类似于Maven的中央仓库和公司内部私服。 下面我们就来介绍一下在Docker中如何去访问各种仓库。 Docker Hub 公共镜像仓库 Docker Hub 是Docker官方提供的最…...

【力扣】722. 删除注释

以下为力扣官方题解&#xff0c;及本人代码 722. 删除注释 题目题意示例 1示例 2提示 官方题解模拟思路与算法复杂度 本人代码Java提交结果&#xff1a;通过 题目 题意 给一个 C C C 程序&#xff0c;删除程序中的注释。这个程序 s o u r c e source source 是一个数组&a…...

篇二:工厂方法模式:灵活创建对象

篇二&#xff1a;“工厂方法模式&#xff1a;灵活创建对象” 开始本篇文章之前先推荐一个好用的学习工具&#xff0c;AIRIght&#xff0c;借助于AI助手工具&#xff0c;学习事半功倍。欢迎访问&#xff1a;http://airight.fun/。 另外有2本不错的关于设计模式的资料&#xff…...

Python(六十二)字典元素的增、删、改操作

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…...

从零学算法138

**138.**给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新节…...

CTF PWN练习之返回地址覆盖

今天进行的实验是CTF PWN练习之返回地址覆盖&#xff0c;来体验一下新的溢出方式。 学习地址覆盖之前还有些小知识需要掌握&#xff0c;不然做题的时候你肯定一脸懵逼,首先是函数调用约定&#xff0c;然后还要知道基本的缓冲区溢出攻击模型。 函数调用约定 函数调用约定描述…...

OpenCV中图像变换

一、介绍 transform()&#xff1a;Transposes a matrix. perspectiveTransform()&#xff1a;Performs the perspective matrix transformation of vectors. warpAffine()&#xff1a;Applies an affine transformation to an image. warpPerspective()&#xff1a;Applies a p…...

wordpress发表文章时报错: rest_cannot_create,抱歉,您不能为此用户创建文章(已解决)

使用wordpress 的rest api发布文章&#xff0c;首先使用wp-json/jwt-auth/v1/token接口获取token&#xff0c;然后再使用/wp-json/wp/v2/posts 接口发表文章&#xff0c;但是使用axios请求时&#xff0c;却报错&#xff1a; 但是&#xff0c;我在postman上却是可以的&#xff0…...

数学建模学习(7):Matlab绘图

一、二维图像绘制 1.绘制曲线图 最基础的二维图形绘制方法&#xff1a;plot -plot命令自动打开一个图形窗口Figure&#xff1b; 用直线连接相邻两数据点来绘制图形 -根据图形坐标大小自动缩扩坐标轴&#xff0c;将数据标尺及单位标注自动加到两个坐标轴上&#xff0c;可自定…...

Sentaurus TCAD实战——TCL脚本自动化仿真流程设计

1. 为什么需要TCL自动化仿真流程 第一次接触Sentaurus TCAD时&#xff0c;我像大多数工程师一样&#xff0c;在图形界面里点点鼠标完成仿真。但连续熬夜三天后&#xff0c;我发现每次修改参数都要重复点击20多个按钮&#xff0c;仿真100组参数意味着2000次机械操作。这种重复劳…...

iOS YYKline核心组件解析:Model、Painter与Config架构设计

iOS YYKline核心组件解析&#xff1a;Model、Painter与Config架构设计 【免费下载链接】YYKline iOS YYKline&#xff1a;Kline、Chart、Volume、Scroll、Scale、MACD、KDJ、K线图、分时图... 项目地址: https://gitcode.com/gh_mirrors/yy/YYKline iOS YYKline是一个功…...

贵州辣椒酱:一份榜单,供参考

贵州辣椒酱&#xff1a;一份榜单&#xff0c;供参考贵州是全国最大的辣椒生产基地之一。辣椒酱在当地人的日常饮食中&#xff0c;算是比较基础的调味品。近几年&#xff0c;贵州辣椒酱的市场认知度逐渐提高&#xff0c;品牌也多了起来。2026年&#xff0c;贵州省辣椒产业协会发…...

别再对着空白界面发呆了!手把手教你用GNURadio Companion(GRC)画出第一个信号流图

别再对着空白界面发呆了&#xff01;手把手教你用GNURadio Companion&#xff08;GRC&#xff09;画出第一个信号流图 第一次打开GNURadio Companion&#xff08;GRC&#xff09;时&#xff0c;那个空白的画布和密密麻麻的模块列表确实容易让人望而生畏。作为一个过来人&#x…...

OpenClaw v2026.4.12 功能介绍

最新版本&#xff1a; v2026.4.12&#xff08;2026-04-13 发布&#xff09; License&#xff1a; MIT一、核心定位OpenClaw 是一个私有化部署的个人 AI 助手&#xff0c;运行在你自己的设备上&#xff0c;通过你日常使用的消息渠道&#xff08;微信、飞书、Telegram、Discord、…...

Android离屏渲染:从原理到性能优化的全景解析

1. 什么是Android离屏渲染&#xff1f; 离屏渲染&#xff08;Offscreen Rendering&#xff09;是图形处理中的一个重要概念。简单来说&#xff0c;当系统无法直接在屏幕上绘制某些复杂视觉效果时&#xff0c;会先在内存中创建一个临时缓冲区进行绘制&#xff0c;然后再将这个缓…...

QuickTime Player录屏声音不全?试试这招!Soundflower+麦克风双轨录制教程

Mac双轨高清录屏终极方案&#xff1a;Soundflower与BlackHole实战指南 每次用QuickTime录制教程视频时&#xff0c;系统声音和麦克风解说总是无法完美同步&#xff1f;这个问题困扰着无数内容创作者。作为一位长期使用Mac进行音乐制作和视频教程录制的资深用户&#xff0c;我深…...

2.14 sql数据删除(DELETE、TRUNCATE)

2.14 数据删除&#xff08;DELETE、TRUNCATE&#xff09; 这一章我会带你彻底搞懂SQL中删除数据的两大利器&#xff1a;DELETE和TRUNCATE。学完之后&#xff0c;你能安全地清理无效订单、测试数据&#xff0c;并能区分什么时候用DELETE&#xff0c;什么时候用TRUNCATE。 学习前…...

《王者荣耀世界》公测开服!开荒攻略+手机摸鱼,超全攻略一篇搞定!

腾讯天美工作室的《王者荣耀世界》PC端今天&#xff08;4月10日&#xff09;7:00已经正式开服了&#xff01;作为王者IP首个开放世界RPG&#xff0c;这波是真的能“走进”王者大陆了&#xff01;这里整理了开服情报新手开荒攻略摸鱼黑科技&#xff0c;新老玩家都能用上&#xf…...

APK Installer:重新定义Windows上的安卓应用体验边界

APK Installer&#xff1a;重新定义Windows上的安卓应用体验边界 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在数字生态日益融合的今天&#xff0c;跨平台应用运行…...