IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Java核心面试宝典】Day17、详解“Keep-Alive”和“非 Keep-Alive”区别及使用场景 -> 正文阅读

[Java知识库]【Java核心面试宝典】Day17、详解“Keep-Alive”和“非 Keep-Alive”区别及使用场景

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知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 16:31:00  更:2021-08-23 16:31:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:34:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码