HTTP 协议与 TCP/IP 协议的关系

HTTP 协议是应用层的协议,而 TCP 协议是传输层的协议,IP 协议是网络层的协议。

IP 协议主要解决网络路由以及寻址等问题,而 TCP 协议主要解决如何在 IP 层之上如何更加可靠地进行数据包的传递,即在接收端收到发送端发出的所有包,并且顺序与发出顺序一致。

所以说 TCP 是可靠的,面向连接的协议。

HTTP 协议是无状态的

无状态是指 HTTP 对事务的处理没有记忆能力,服务端并不知道客户端的状态(也就是说,你现在打开一个网页,和你之前打开同一个服务器的网页之间,并没有任何的关系)。

HTTP 是无状态的面向连接的协议。(无状态并不是说明 HTTP 协议无法保存 TCP 连接,也不能代表 HTTP 使用的是 UDP 连接–无连接)

HTTP 的长连接和短连接HTTP/1.0 默认使用短连接

HTTP/1/1 默认使用长连接

短连接:例如浏览器每一次和服务器进行一次 HTTP 操作,就会建立一次连接,当任务结束的时候,该连接就会断开。

长连接:保持连接特性。每当一个网页打开,客户端和服务端用于 HTTP 数据传输的 TCP 连接将不会被关闭,如果客户端再次访问这个服务端,将会继续使用该 TCP 连接。

使用长连接的 HTTP 协议,会在响应头加上这个属性:1

Connection:keep-alive

Keep-Alive 不会永远保持连接,它会有一个失效时间,可以在服务器上进行设置。

而实现长连接的客户端和服务端都要能够支持长连接。

HTTP 的长连接和短连接的本质,其实就是 TCP 的长连接和短连接。

TCP 连接

当网络使用 TCP 的方式来进行网络连接的时候,在读写之前需要 server 和 client 之间建立起一个连接,当读写操作完成后,再去释放这个连接。

TCP 的连接需要三次握手,而释放需要四次挥手。

从上面的图可以看出,每一次连接都是很损耗资源和时间的。

TCP 的短连接

我们来模拟一下 TCP 的短连接。首先是 Client 向 Server 发送连接请求,Server 接收到请求后建立连接,此时 Client 向 Server 发送消息,Server 回应 Client,这就是一个读写操作完成了,此时两端都可以发起 close 请求,而一般是 Client 发起,因为一般 Server 不会回应完 Client 后立马关闭连接。

这就是短连接,每次连接只能进行一次读写操作。

TCP 的长连接

同样来模拟长连接。首先一样的 Client 会向 Server 发起连接请求,Server 接收到请求后建立连接。不一样的是,此时 Client 和 Server 进行一次读写操作后,两端都不会去主动发起 close 请求,即不会主动断开连接,这样后续的读写操作都会去使用到这个连接。

长连接和短连接的优缺点

长连接因为不用对此进行握手挥手等操作,所以可以省下很多的资源和时间。

但是,由于它的存活时间较长,如果遇到恶意破坏的连接时(在短时间内多个客户端发起连接请求,且这些连接都只是占用资源而已),那么这个服务器崩溃的概率就会增大。

这时的服务器应该采取一些措施来防止这样的情况发生,例如关闭一些长时间没有进行读写操作的连接,限制每一个客户端发起的连接数等。

短连接的优点显而易见,那就是易于管理,它所存在的连接都是有用的连接,不需要额外的控制手段。

但是其缺点也是很显然,当用户在频繁地发起请求的时候,将会在 TCP 的建立和关闭上浪费相当多的资源和时间。

对长连接和短连接的选择

长连接一般用于在操作频繁,点对点的通讯,而且连接数不能太多。

例如数据库的连接就可以使用长连接。

而像 Web 上的网页之类的操作就使用短连接。它适用于连接频繁的操作。

http协议之长连接与短连接服务器,长连接短连接相关推荐

  1. 将serversocket 写在按钮事件中连接不上_Java服务器的模型—TCP连接/流量优化

    本文很长哦,但请给我一点时间. 通常,我们的应用程序不需要并行处理成千上万的用户,也不需要在一秒钟内处理成千上万的消息.我们只需要应付数十或数百个并发连接的用户,就可以在内部应用程序或某些微服务应用程 ...

  2. 光猫连接水星路由器显示服务器,水星mw300r路由器连接光猫的设置方法步骤

    水星mw300r无线路由器因其出色的性能.配置简单和超高的性价比,深受广大用户的喜欢;不过对于没有网络基础的用户来说,完成水星mw300r路由器与光猫的连接设置,任然有一定的困难,下面是学习啦小编给大 ...

  3. 无线网络怎么连接绝地球生服务器,手机无线网络连接方法 手机Wifi无线网络设置的操作步骤组图...

    随着智能手机无线上网的流行,如今很多家庭都会组建Wifi无线网络,目前组建Wifi网络,大致有两种情况,一种是使用无线路由器,另外一种是将笔记本变身无线无路由器,从而实现智能手机也可以免费Wifi上网 ...

  4. android linux网络连接,Android和Linux服务器之间的TCP连接

    我正在编写一个代码,需要每秒从Android移动设备向台式计算机(linux服务器)发送数据.由于数据经常发送,通过Http命中无法实现(因为会消耗时间),所以Tcp通信似乎是更好的选择,因为andr ...

  5. 树莓派蓝牙连接手机显示没有服务器,求助树莓派蓝牙连接问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在一块Raspberry Pi 3的板子与一个带蓝牙的血氧检测板子连接时出现一些问题:板子如图所示 这个板子在与手机蓝牙连接时只需要输入六位000000p ...

  6. ipad显示连接不到商店服务器,iPad Pro无法连接应用商店(App Store)如何解决?

    ipad pro无法连接应用商店(app store)如何解决? 首先在 ipad pro 主屏上找到并打开「设置」,如图所示. 在设置列表中,在左侧边栏中找到并点击「无线局域网」一栏,如图所示. 随 ...

  7. 无线网主服务器连接异常,vivox9plus主服务器异常怎么办。连接不上网络?

    满意答案 酋长stadium 2020.09.24 采纳率:40%    等级:9 已帮助:261人 一.使用数据网络无法上网排查方法: 1.确认手机是否欠费或开通数据上网功能: 2.进入设置--双卡 ...

  8. mysql连接提示错误_服务器经常提示mysql连接错误,有木有解决方法?

    网络是联通的,因为在同一主机内,本地连接到mysql服务器,和运行环境无关,php,python连接数据库都有这种情况出现 提示Can't connect to MySQL server on 'lo ...

  9. DTU连接自建MQTT服务器

    DTU连接自建MQTT服务器 DTU串口助手连接电脑 ,图片中485端口被变送器占用,飞线用来测试 配置参数如图: 重启DTU 网络连接正常. 启动 java 服务端 启动连接成功 发送透传测试数据 ...

最新文章

  1. 【机器学习】特征工程概述
  2. leetcode算法题--预测赢家★
  3. C#多线程 我的第一个多线程程序
  4. 仿MIUI音量变化环形进度条实现
  5. 如何将爬虫获得的数据变为字典的key_Python爬虫第二战 爬取500px图片
  6. 【angularjs】pc端使用angular搭建项目,实现导出excel功能
  7. 解决办法:undefined reference to symbol 'pthread_mutexattr_settype@@GLIBC_2.2.5'
  8. html5论文参考文献合集
  9. 一线工程师如何看待《没了美国的EDA软件,我们就不能做芯片了》
  10. 填坑之路 DirectX11(二)使用 DirectXTex 读取 DDS 文件时报错解决方案
  11. 数据库设计4-概念结构设计
  12. 安装系统之三 U盘启动盘建立磁盘分区教程
  13. android 在线预览pdf文件(目前最全)
  14. 高效率使用日历提醒事项备忘录便签,完成日程规划
  15. 初学3D制作,先学C4D还是Blender?
  16. 【测验1 编程题】: Python基本语法元素 (第1周)
  17. 计算机基础知识集体备课,计算机集体备课(三)
  18. 【BUG解决】sudo apt-get update 报错 E: The repository ‘http://xxx Release‘ does not have a Release file.
  19. 无刷直流电机介绍及单片机控制实例
  20. 2290亿美元,卡塔尔世界杯中国和卡塔尔 都赢了

热门文章

  1. 【概率论】随机变量函数的分布
  2. 品牌传播之广告记忆效果研究
  3. 查看linux系统的ip
  4. SLIC 超像素分割详解(三):应用
  5. FT232H如何使用jtag接口
  6. argc和argv的使用总结
  7. 2022-2028全球与中国嵌入式计算机市场现状及未来发展趋势
  8. 笔记1之极大值分布问题
  9. Weblogic常见报错以及解决方法[转载]
  10. 自动化学科国家自然基金委十二五规划 2009年12月