作者回复: 1、长连接只是将TCP连接的特性暴露出来;
2、客户端和服务器,需要在完成1次request/response后,继续保持TCP连接不要关闭,留待下次复用。
3、客户端和服务器都有定时器,空闲时间过长后,就会关闭。
以上就是HTTP长连接。
作者回复: 你是问浏览器吧?Chrome的Network面板就能看到,概述图形面板里,看同时出现的线条数就可以。目前,Chrome最多并发6个连接。
作者回复: 如浏览器访问页面通常用长连接,因为WEB页面有上百个对象,复用连接减少了TCP握手次数、解决了拥塞控制问题。
如agent通过HTTP上报数据可用短连接,因为间隔时间久,服务器不用浪费内存、CPU等资源来维护使用率很低的连接。
作者回复: 你是说陈旧的代理服务器那个例子?这里的代理默认使用1.0,但它的问题是不能识别Connection: KeepAlive头部。当浏览器试图复用连接发送第2个请求时会出错。
作者回复: TCP是面向字符流的协议,它没有消息、请求的概念,需要TCP之上的应用层去区分消息的边界。可以看看第85课
作者回复: 你是说,status code是200,但没有body是吗?中间的代理服务器上,你可以查看access.log,看看3个代理是不是都没有body。可以通过response的content-length来确定,如果是Nginx可以通过$body_bytes_sent变量来看,详见《Nginx核心知识100讲》第74课
作者回复: 与TCP无关,只是HTTP的客户端、服务器约定好,处理完一次request/response事务后,一定时间内不关连接(还得记Nginx中的keepalive_timeout 75s指令吗?),留待下次复用
作者回复: 这种情况都是短连接,不会出现问题。
作者回复: 1、Nginx作为反向代理时通常不需要携带proxy connection头部,因为它面对的都是企业自有服务器,是否支持长连接很清楚。
2、如果Nginx连接的是外部服务,就需要手动通过proxy_set_header等指令来向上游配置连接属性了。
3、目前的Nginx框架不处理proxy connection指令。
作者回复: 是的
作者回复: 不会,Nginx主要应用场景是企业内网边缘入口,它所服务的upstream都是企业自己的服务器,而不是internet上的未知服务器
作者回复: 指:浏览器明确知道用户点击配置了代理服务器
作者回复: 不是,浏览器无法知道有没有反向代理,但如果在它可感知范围内配置了代理,自然就会启用proxy_connection。反向代理是一样的
作者回复: 只有代理服务器会处理Proxy-Connection头部,源服务器会忽略这个头部
作者回复: 客户端和服务器谁先超时,谁就先关闭连接。比如,Nginx的默认超时时间是65秒。当然可以通过配置文件修改。
打开一个网页,Chrome当前默认最多打开6个连接。
作者回复: 1、每个编程框架都有添加header的方式,例如Nginx中有一个add_header指令,而js、python的requests库等也有相应的添加header的方法。
2、老的代理不认proxy-connection头部时,就是直接转发;认识该头部的代理,会按课程中所述的方式处理连接。