作者回复: 1、长连接只是将TCP连接的特性暴露出来; 2、客户端和服务器,需要在完成1次request/response后,继续保持TCP连接不要关闭,留待下次复用。 3、客户端和服务器都有定时器,空闲时间过长后,就会关闭。 以上就是HTTP长连接。
作者回复: 如浏览器访问页面通常用长连接,因为WEB页面有上百个对象,复用连接减少了TCP握手次数、解决了拥塞控制问题。 如agent通过HTTP上报数据可用短连接,因为间隔时间久,服务器不用浪费内存、CPU等资源来维护使用率很低的连接。
作者回复: TCP是面向字符流的协议,它没有消息、请求的概念,需要TCP之上的应用层去区分消息的边界。可以看看第85课
作者回复: 1、Nginx作为反向代理时通常不需要携带proxy connection头部,因为它面对的都是企业自有服务器,是否支持长连接很清楚。 2、如果Nginx连接的是外部服务,就需要手动通过proxy_set_header等指令来向上游配置连接属性了。 3、目前的Nginx框架不处理proxy connection指令。
作者回复: 与TCP无关,只是HTTP的客户端、服务器约定好,处理完一次request/response事务后,一定时间内不关连接(还得记Nginx中的keepalive_timeout 75s指令吗?),留待下次复用
作者回复: 你是说陈旧的代理服务器那个例子?这里的代理默认使用1.0,但它的问题是不能识别Connection: KeepAlive头部。当浏览器试图复用连接发送第2个请求时会出错。
作者回复: 你是说,status code是200,但没有body是吗?中间的代理服务器上,你可以查看access.log,看看3个代理是不是都没有body。可以通过response的content-length来确定,如果是Nginx可以通过$body_bytes_sent变量来看,详见《Nginx核心知识100讲》第74课
作者回复: 你是问浏览器吧?Chrome的Network面板就能看到,概述图形面板里,看同时出现的线条数就可以。目前,Chrome最多并发6个连接。
作者回复: 不会,Nginx主要应用场景是企业内网边缘入口,它所服务的upstream都是企业自己的服务器,而不是internet上的未知服务器
作者回复: 你好疯琴,严格来说,是http1.0刚推出时不支持connection头部,具体你可以参见RFC1945这个文档(https://tools.ietf.org/html/rfc1945),但因为有需求,各浏览器、web服务器(如apache httpd)相继实现,所以后期广为使用,在http1.1中正式列到RFC规范中,而且默认为keepalive长连接