Connection: Keep-Alive
上午在实验室看书,师弟让我帮忙解决个项目上的问题,问题不难,于是我教他抓包解决,让他电脑下了fiddler不过却显示不出来请求,我尝试了一下也是如此,过滤器也没开,突然意识到可能是360的问题,因为fiddler是通过http代理的方式,360很可能阻止第三方软件对浏览器代理,于是关掉360,重启浏览器终于能愉快的抓包了。
调试过程中我让他F12勾上disable cache,然后眼睛被一个词语吸引住了---Connection: Keep-Alive
当时很疑惑,http明明是无连接无状态的,那么这里的keepalive是指什么?
实际上它是一种TCP复用,每次http请求都需要tcp三次握手,浪费资源和时间,因此我们可以保持tcp通道连接一段时间,这样一次tcp连接就可以维持几次http请求。
在此基础上,还需要搞清楚几个其他的名词:长轮询,段轮询
长连接是为了tcp复用,那么这两个词是做什么的呢?先说个例子:
短轮询相信大家都不难理解,比如你现在要做一个电商中商品详情的页面,这个详情界面中有一个字段是库存量(相信这个大家都不陌生,随便打开淘宝或者京东都能找到这种页面)。而这个库存量需要实时的变化,保持和服务器里实际的库存一致,怎么实现?
长轮询这个时候就出现了,其实长轮询和短轮询最大的区别是,短轮询去服务端查询的时候,不管库存量有没有变化,服务器就立即返回结果了。而长轮询则不是,在长轮询中,服务器如果检测到库存量没有变化的话,将会把当前请求挂起一段时间(这个时间也叫作超时时间,一般是几十秒)。在这个时间里,服务器会去检测库存量有没有变化,检测到变化就立即返回,否则就一直等到超时为止。
很明显,使用长轮询客户端的请求次数将会大量减少(这也就意味着节省了网络流量,毕竟每次发请求,都会占用客户端的上传流量和服务端的下载流量)。但是如果大量客户端都在请求库存,服务端用多个线程来挂起请求,这样服务器的压力也太大了吧。因此长轮询也是有适用场景的。
区分下长轮询和长短连接,他们最根本的区别是:
第一个区别是决定的方式,一个TCP连接是否为长连接,是通过设置HTTP的Connection Header来决定的,而且是需要两边都设置才有效。而一种轮询方式是否为长轮询,是根据服务端的处理方式来决定的,与客户端没有关系。
第二个区别就是实现的方式,连接的长短是通过协议来规定和实现的。而轮询的长短,是服务器通过编程的方式手动挂起请求来实现的。
总之,记住这一点:长连接是指的TCP连接,而不是HTTP连接。HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说
转载于:https://www.cnblogs.com/ZoHy/p/11331058.html
Connection: Keep-Alive相关推荐
- 转载:有关SQL server connection Keep Alive 的FAQ(3)
转载:http://blogs.msdn.com/b/apgcdsd/archive/2012/06/07/sql-server-connection-keep-alive-faq-3.aspx 这个 ...
- 有关SQL server connection Keep Alive 的FAQ(3)
这个是SQL Server Keep Alive FAQ文章的最后一篇. 问题1:为什么我在客户端设置了KeepAlive值,但是我使用SQL server management studio 测试的 ...
- 有关SQL server connection Keep Alive 的FAQ(2)
这篇文章再进一步讨论有关Keep Alive的几个问题. 1.Keep Alive机制,是否只和特定的provider有关,比如SQL native client, odbc, oledb, ADO等 ...
- 通过mongodb客户端samus代码研究解决问题
最近有项目需要用到mongodb,于是在网上下载了mongodb的源码,根据示例写了测试代码,但发现一个非常奇怪的问题:插入记录的速度比获取数据的速度还要快,而且最重要的问题是获取数据的速度无法让人接 ...
- python有道词典-Python爬取有道词典
from urllib import request,parse import hashlib import random import time import json #定义md5加密函数 def ...
- python爬虫——论抓包的正确姿势和学好Javascript的重要性(1)
没事想爬下数据,就入了scrapy坑,跟着https://zhuanlan.zhihu.com/data-factory这篇教程走,中间被小数量的网站坑过,不过还是写出了爬虫~~ 切糕王子:毫无防御, ...
- Scrapy定向爬虫教程(三)——爬取多个页面
本节内容 本部分所实现的功能是,批量的爬取网页信息,不再是像以前那样只能下载一个页面了.也就是说,分析出网页的url规律后,用特定的算法去迭代,达到把整个网站的有效信息都拿下的目的. 因为本部分讲完后 ...
- Ubuntu 16.04+.Net Core+Docker+Nginx安装部署
前言 最近公司的项目打算移植到.Net Core平台,所以调研了一下.Net Core在Linux下的安装部署.本篇文章会一步步的描述从安装到配置到部署的全部过程.在文章的结构和内容里,笔者借鉴了很多 ...
- CS144 lab4 计算机网络实验 笔记
CS144 lab4 计算机网络实验 笔记 介绍 本实验中,我们将组合TCP sender和TCP receiver实现一个完整的TCP connection TCP是全双工连接,所以两方可以同时接收 ...
- TF使用例子-情感分类
北京站 | NVIDIA DLI深度学习培训 2018年1月26日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文 正文共10052个字,4张图,预计阅读时间26分钟. 这次改写一下 ...
最新文章
- 分治法求解最大子数组问题
- html背景过大,html – CSS – 背景大小:封面太大了
- Defend Your Country
- 3dmax如何拆分模型_3dmax制作装饰柜1
- 关于深度学习框架Hamaa与Python API文档生成工具Sophon
- linux命令栏下访问oracle,linux下远程连接oracle数据库
- 大数据时代下的信息安全
- Struts2 注解
- Seaweedfs上传大文件_large file
- 《按自己的意愿过一生》语录二
- Windows10 mysql解决MySQL服务无法启动 系统出错 发生系统错误 1067
- LED指示灯在常见网络设备故障诊断中的应用
- 创业:房多多--如何成功从红海杀出一片天空
- java程序员的转正述职ppt
- MySQL中登录报错_mysql登录报错 ERROR 1045 (28000)
- 人工智能html5背景,HTML5人工智能基础及实践
- 域控服务器可以加几个辅域,如何搭建AD域控的辅域控(20200927213255).docx
- 探秘前端 CRDT 实时协作库 Yjs 工程实现
- nginx快速配置参考
- 记录自己第一次科研经历