HTTP的长链接和短链接说明

HTTP的长链接和短链接实际上是TCP的长连接和短链接。首先我们先介绍一下TCP/IP协议组四层模型。其中包括以下:

  1. 应用层:HTTP、FTP、DNS、TELNET等协议
  2. 传输层:TCP、UDP
  3. 网络层:IP、ARP、RARP、ICMP协议等
  4. 网络接口层:是TCP/IP协议的基层,负责数据帧的发送和接收。

接下来我们说下常见的几个协议的作用:

  • HTTP:HTTP协议无状态指的是对事物处理没有记忆能力。也就是说打开一个服务器的网页和上次打开这个网页之间没有任何联系。

  • IP协议:负责解决网路路由和寻址问题

  • TCP:解决如何在IP层之上可靠的传递数据包。并且顺序和发送顺序一致,不丢包。TCP协议是可靠的、面相连接的。

  • UDP:与TCP是对应,是面相非连接的协议,只负责把数据包传过去。数据量小、可靠性不高,可能会掉包。我们经常使用的ping命令就是发送UDP数据包。

好了好了,进入正题,开始说长链接和短链接。

短连接

在HTTP/1.0中默认是使用短连接,客户端每进行一次http请求就建立一次连接,任务结束连接就中断(双方都可以发起close,一般是客户端发起),比如访问一个网页或者其他web资源(img、css、js等),每遇到一个web资源就要建立一次连接。

优缺点:

因为每次通信都需要建立TCP连接,连接的建立都需要三次握手,而释放需要四次握手。所以会浪费时间和带宽。但是优点就是对于服务端来讲,不要进行额外的控制,每条连接都是有用的。

长连接

从HTTP/1.1开始默认使用长连接。使用长连接的HTTP协议会在响应头加入Connection: keep-alive。当打开一个网页客户端和服务端建立的TCP连接不会关闭。当再次访问服务器时还会使用这个连接。但是这个状态不会永久保持连接,可以在不同的服务器软件(Apache)上设置。

优缺点:

减少了TCP的建立和关闭,减少浪费、节约时间。对于频繁请求适合使用长连接,但是缺点就是随着用户的增多,服务器会扛不住的。所以需要采取一些策略:如关闭长时间没有读写操作的连接。

应用

web网站的http服务一般都是短连接。

保活功能扩展:

如果客户端已经消失但是连接没有断开,服务器会保留一个半开放的连接,而服务器又在等待客户端的数据,此时服务端将会永远等待。保活功能会试图检测半开放状态。如果一个连接2个小时没有任何动作,服务端会发送一个试探报文,根据客户端响应的4个客户端状态进行判断。

  1. 客户端机正常运行,且服务器可达,此时TCP响应正常,服务器将保活定时器复位。

  2. 客户机已经奔溃,并且关闭或者重新启动。服务端无法收到响应。服务端每隔75秒发一次,一共发10次,若没有收到一个响应,则认为客户端已经关闭并且终止连接。

  3. 客户端奔溃并已经重新启动,服务端将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。

  4. 客户机正常运行,但是服务器不可达。这种情况与第二种类似。

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

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

相关文章

多生产者_你是生产者还是消费者?这决定了你的层次。

不知道你有没有注意到,每天乘坐地铁上下班的时候,大部分人都在刷剧、看视频、打游戏等等,总之都属于玩乐。用生产和消费的关系来看的话,其实这一大部分人都属于消费者,“时间和注意力”是他们用于交换的筹码&#xff1…

eclipse Android 开发基础 Activity 窗体 界面

eclipse Android 开发基础 新建工程 新建布局layout,new Android Activity就相当于窗体Form。 新建Activity自动生成src下同名的java代码。 public class Tform2activity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(saved…

8 种常被忽视的 SQL 错误用法

来源&#xff1a;http://t.cn/R6UMaA11、LIMIT 语句2、隐式转换3、关联更新、删除4、混合排序5、EXISTS语句6、条件下推7、提前缩小范围8、中间结果集下推总结sql语句的执行顺序&#xff1a;FROM <left_table>ON <join_condition><join_type> JOIN <right…

变频器按启动没反应_起重机软启动柜晶闸管损坏维修几大故障

缺相保护功能&#xff1a;工作时&#xff0c;软起动器随时检测三相线电流的变化&#xff0c;一旦发生断流&#xff0c;即可作出缺相保护反应。过热保护功能&#xff1a;通过软起动器内部热继电器检测晶闸管散热器的温度&#xff0c;一旦散热器温度超过允许值后自动关断晶闸管&a…

Redis 的各项功能解决了哪些问题?

作者丨blackheart先看一下Redis是一个什么东西官方简介解释到&#xff1a;Redis是一个基于BSD开源的项目&#xff0c;是一个把结构化的数据放在内存中的一个存储系统&#xff0c;你可以把它作为数据库&#xff0c;缓存和消息中间件来使用。同时支持strings&#xff0c;lists&am…

python datetime用法_python datetime用法学习笔记

一、主要思路&#xff1a;1.把表示时间的str转换为datetime对象2.操作datetime对象输出期望的时间格式二、把表示时间的str转换为datetime对象语法&#xff1a;datetime.strptime(date_str, format)示例&#xff1a;date_str "2017-06-23 21:08:12"date_obj dateti…

RocketMQ集成SpringBoot

RocketMQ集成SpringBoot RocketMQ总体架构 RocketMQ基本特性

协议(Protocol)与委托代理(Delegate)

协议(Protocol)的作用&#xff1a; 1. 规范接口&#xff0c;用来定义一套公用的接口&#xff1b; 2. 约束或筛选对象。 代理(Delegate)&#xff1a; 它本身是一种设计模式&#xff0c;委托一个对象<遵守协议>去做某件事情&#xff0c;目的是为了降低对象间的耦合度&#…

ASP.NET Core 2.2+Quartz.Net 实现Web定时任务

作者&#xff1a;Julian_酱链接&#xff1a;http://www.cnblogs.com/mi12205599/p/10361763.html作为一枚后端程序狗&#xff0c;项目实践常遇到定时任务的工作&#xff0c;最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主机上部署定…

lj245a引脚功能图_ULN2003A引脚图及功能-uln2003a原理

ULN是集成达林顿管IC&#xff0c;内部还集成了一个消线圈反电动势的二极管&#xff0c;可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压50V,电流500mA,输入电压5V,适用于TTL COMS,由达林顿管组成驱动电路。ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势…

RocketMQ核心概念

生产者Producer和消费者Consumer NameServer作用 Broker和Topic

交叉编译、软硬链接

什么是交叉编译&#xff1f;交叉编译是一个行为&#xff0c;是在一个平台上生成另一个平台上的可执行代码。 本地编译&#xff1a;本地编译可以理解为&#xff0c;在当前编译平台下&#xff0c;编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发&#xff0c;都是…

扫地机器人狗毛_扫地机器人:我是清理狗毛的!不是清理狗屎的!

原标题&#xff1a;扫地机器人&#xff1a;我是清理狗毛的&#xff01;不是清理狗屎的&#xff01;扫地机器人可以清洁地面和角落里的垃圾&#xff0c;对于满是毛毛的铲屎官家庭来说&#xff0c;简直就是福音呐&#xff01;不过最近&#xff0c;槽点却有点多&#xff1a;家里买…

Linus下安装maven

下载maven安装包 wget http://mirror.bit.edu.cn/apache/maven/binaries/apache-maven-3.2.2-bin.tar.gz 解压 tar -zxvf apache-maven-3.2.2-bin.tar.gz 配置maven环境变量 查看maven解压后安装包目录 vi /etc/profile 进入最底部&#xff0c;按insert,添加环境变量&#x…

linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)

首先下载树莓派linux内核源码&#xff1a; 下载网址&#xff1a;https://github.com/raspberrypi/linux在树莓派使用指令&#xff1a;uname -r查看当前树莓派的版本号&#xff0c;然后选择对应的linux内核版本号进行下载。 将linux内核源码从共享文件夹拷贝到SYSTEM文件夹&am…

Linux实时查看进程命令top笔记

top命令是Linux下常用的性能分析工具&#xff0c;能够实时显示Linux系统中各个进程的资源占用状况&#xff0c;类似于Windows系统的任务管理器功能。 top命令的语法格式&#xff1a; top [-] [d] [p] [q] [c] [C] [S] [s] [n] 常用参数说明 d 指定每两次屏幕信息刷新之间的时间…

C#基础之Equals和Dispose

1.equal()和运算符的区别 由于C#中有值类型和引用类型&#xff0c;那么相等也分为值相等和引用相等。先来看一个值类型简单的例子&#xff0c;顺便也写了string类型的比较。 static void Main(string[] args){int n1 1;int n2 1;Console.WriteLine(n1n2);Console.WriteLine(n…

mysql 时间chuo格式化_Mysql时间戳与时间格式转换问题汇总

一、时间戳的定义时间戳指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。二、时间格式转时间戳的方法使用unix_timestamp函数&#xff0c;如下&#xff1a;SELECT UNIX_TIMESTAMP();//返回当前时间戳SELECT UNIX_TIMESTAMP(2017-12-16 17:29:56) AS t; //返回指定时…

文件系统(文件系统目录结构、磁盘分区、虚拟文件系统)、linux内核结构框图

什么是文件系统&#xff1f; 常规认知就是根目录下那些文件&#xff0c;但其实并不是那样。文件系统是操作系统用于明确存储设备&#xff08;常见的是磁盘&#xff0c;也有基于NAND Flash的固态硬盘&#xff09;或分区上的文件的方法和数据结构&#xff1b;即在存储设备上组织…