Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!
用坚持缔造技术、用指尖敲动未来!
和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣
在此专栏《Java核心面试宝典》记录我们备战梦想的【day 17】

今天我来和大家讲解一下HTTP协议中有关持久层连接和非持久层连接的几道常见面试题。

一、“持久连接(Keep-Alive)和非持久连接(非Keep-Alive)的区别,他们对服务性能有影响吗?”

在最早期的HTTP/1.0中,**浏览器每次发起HTTP请求都要与服务器建立一个TCP连接,服务器完成请求处理之后就会立即断开这个TCP连接,**因此服务器并不会跟踪每一个用户,同时也不会记录之前的请求信息。然而创建和关闭连接是需要消耗大量的资源和时间的,为了减少资源的消耗,缩短响应的时间,就需要重用连接。

所以在之后的HTTP/1.1版本中就默认使用持久连接,而在之前的版本中默认使用的是非持久连接,

对于非Keep-Alive来说, 对于每一个浏览器请求,我们必须为每一个请求的对象建立和维护一个全新的连接,同时对于每一个这样的连接,客户机和服务器都要分配TCP的缓冲区和变量,这就给服务器带来了严重的负担,因为一台web服务器可能服务数以百计的客户机请求,如果每一次请求对要不断的断开和重新建立连接,那么将会对服务器资源造成巨大的损失!

而在Keep-Alive方式下, 服务器响应后保持该TCP连接打开,这样在同一台客户机和服务器之间进行的后续请求和响应报文就都可以通过这个TCP连接传输,甚至位于同一台服务器的多个web页面在向同一个客户机发送时,可以在单个持久的TCP连接上进行。

我们可以通过下面这张图来表示Keep-Alive和非Keep-Alive连接。
但是对于Keep-Alive就没有缺点了吗?并不是的!

二、追问:如何避免持久连接时系统资源被无效占用?

当我们长时间保持TCP连接时容易造成系统资源被无效占用, 若对Keep-Alive模式配置不当,这样将可以会造成比非Keep-Alive方式更大的损失。因此我们需要正确的设置Keep-Alive timeout参数,当TCP连接传送玩最后一个HTTP响应后,该连接会保持Keep-Alive_timeout秒,之后断开并关闭这个连接!这样就会很好的避免系统资源被长时间无效的占用。

三、追问:那么如果使用了旧版本的HTTP,如何维持持久连接呢?

如果想要在旧版本的HTTP协议上维持持久连接,则需要指定connection的首部字段为Keep-Alive,来告诉对方这个请求完成后不要关闭,下一次还要使用这个连接进行通信。

四、HTTP长连接和短连接的使用场景是什么?

长连接: 长连接多用于操作频繁点对点的通讯,而且客户端连接数目较少的情况。如即时通讯、网络游戏等。

短连接: 用户数目较多的web网站通常使用短连接,例如京东、淘宝这样的大型网站一般客户端数量达到千万级甚至上亿,若使用长连接势必会造成大量的资源被无效占用,所以一般使用短连接,请求处理完成即关闭!

今日总结

今天的文章主要和大家讲解了HTTP协议的持久连接和非持久连接的区别和使用,我们需要了解持久连接和非持久连接的特点两者之间如何转换使用场景等。

如果小伙伴们有遇到其他相关的面试题,欢迎在评论区留言提出,我会把大家提出的总结到文章内, 欢迎小伙伴们一起评论区打卡学习!小伙伴们可也在左方加我好友一起探讨学习!

我是 灰小猿 ,我们下期见!

【Java核心面试宝典】Day17、详解“Keep-Alive”和“非 Keep-Alive”区别及使用场景相关推荐

  1. 【Java核心面试宝典】Day16、“计算机网络协议层次及服务类型”面试题!✊✊✊

    Hello,你好呀,我是灰小猿!一个超会写bug的程序猿! 用坚持缔造技术.用指尖敲动未来! 和很多小伙伴们一样,我也是一名奔波在Java道路上的"创造者".也想靠技术来改未来,改 ...

  2. 详解Javascript本地存储的方式、区别及应用场景

    详解Javascript本地存储的方式.区别及应用场景 一.方式 javaScript本地缓存的方法我们主要讲述以下四种: cookie sessionStorage localStorage ind ...

  3. 【Java核心面试宝典(1),程序员Javaweb源码

    **这里就涉及到了一个链表中数据存储时,进行"树化"和"链化"的一个过程,**那么什么是"树化"和"链化"呢? 当我们在 ...

  4. 【Java核心面试宝典(2),记一次美团Java研发岗的面试经历

    面向过程的优点: 性能方面比面向对象高,不需要面向对象的实例化, 面向过程的缺点: 因为是按照步骤实现函数并依次调用的,因此不容易复用.维护和扩展. 面向对象的优点: 具有封装.继承和多态的特征,因而 ...

  5. java后端面试大全,java后端面试宝典

    文章目录 -2 flink -1 linux of view linux查看占用cup最高的10个进程的命令: 〇.分布式锁 & 分布式事务 0-1分布式锁--包含CAP理论模型 概述 分布式 ...

  6. 转:Java 7 种阻塞队列详解

    转自: Java 7 种阻塞队列详解 - 云+社区 - 腾讯云队列(Queue)是一种经常使用的集合.Queue 实际上是实现了一个先进先出(FIFO:First In First Out)的有序表. ...

  7. 进大厂一条龙服务(Java核心面试知识点+一线大厂Java笔试面试题+月薪3万Java优秀简历模板),看这篇就够了

    你有没有觉得Java_工程师竞争压力大.就业困难?不知道面试Java工程师应该准备些什么?.. 现在一切都解决了!你想要的干货知识和面试题统统在这,还有月薪3万Java优秀简历模板,快拿回去嚼烂吧! ...

  8. Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3

    Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...

  9. Android面试Hash原理详解二

    Hash系列目录 Android面试Hash原理详解一 Android面试Hash原理详解二 Android面试Hash常见算法 Android面试Hash算法案例 Android面试Hash原理详解 ...

最新文章

  1. 架构设计之分布式文件系统
  2. 举例讲解EFS的加密技巧
  3. mysql导入数据,涉及到时间转换,乱码问题解决
  4. 10、Power Query-合并查询与追加查询结合应用
  5. php 设置页面内容具有缓存性,php header()设置页面Cache缓存
  6. leetcode python3 简单题112. Path Sum
  7. python计时器timeit返回秒数_一日一技:Python中的timeit()方法
  8. 微软应用商店正式向中国开发者开放
  9. 手把手教你在Linux上安装CUDA9.0(以及如何避开所有的坑)
  10. python实现判断一个整数是否是回文数
  11. 三阶实对称矩阵的秩一分解(快速计算三阶矩阵特征值特征向量的方法)
  12. 常用的jar包下载网站(自用)
  13. 航拍地形图转换成地形图_基于高清卫星遥感影像快速生成地形图成图方法与流程...
  14. 0-day漏洞,1-day漏洞,n-day漏洞各自是什么意思?
  15. 应用之星教你制作高下载量的App
  16. Tensorflow使用object_detetcion安装教程
  17. 纯前端实现xls表格下载
  18. A股十大股东持股数据查询网站的数据库设计
  19. Redis 处理接口幂等性的两种方案
  20. Android 百度鹰眼 SDK

热门文章

  1. 一文详解MySQL的锁机制
  2. JAVASE——1.File
  3. 关于“好奇号”火星车(Rover)的核电池
  4. 制作一只熊公司年收入2亿
  5. mysql主键能当外键吗_MySQL主键跟外键
  6. 【摘】table滚动条样式
  7. 战疫互动|宅家防疫,“消灭新冠病毒”小游戏火爆上线啦~(附完整源码)
  8. Uncaught TypeError: Cannot set properties of undefined (setting ‘ innerHTML ) 问题
  9. 五个YouTube SEO 查找和分析关键词的小技巧
  10. CSS 如何实现文字两端对齐