首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Nginx向Golang后端发送"Connection: close“而不是"Connection: upgrade”

Nginx向Golang后端发送"Connection: close"而不是"Connection: upgrade"的原因是因为它们所代表的不同的HTTP协议语义和用途。

"Connection: close"是一种常见的HTTP请求头字段,用于指示客户端或服务器关闭与对方之间的TCP连接,即在请求/响应之后立即关闭连接。这种行为适用于传输小文件或短时间请求的场景,当请求完成后,连接立即关闭,以释放服务器资源。

而"Connection: upgrade"是另一种HTTP请求头字段,它允许客户端和服务器通过协议升级的方式,从HTTP协议切换到其他协议,如WebSocket或HTTP/2。升级后的连接将保持打开状态,可以进行双向通信和实时数据传输。这种行为适用于需要长时间保持连接的场景,例如实时聊天应用或实时数据流传输。

对于Nginx向Golang后端发送"Connection: close"而不是"Connection: upgrade"的具体原因可能有多种情况,包括:

  1. 需要在请求完成后立即释放服务器资源:如果后端Golang应用程序处理的是短时间请求或仅需返回简单响应的情况,Nginx选择关闭连接是合理的,以避免不必要的连接资源占用。
  2. 后端Golang应用程序不支持升级协议:如果后端Golang应用程序没有实现处理"Connection: upgrade"请求头字段的逻辑,Nginx选择关闭连接是必要的,以避免可能的错误响应或不一致行为。
  3. 中间代理服务器的限制:如果在Nginx和后端Golang应用程序之间存在其他中间代理服务器,这些代理服务器可能会限制或阻止升级协议的使用,因此Nginx只能选择关闭连接。

综上所述,Nginx向Golang后端发送"Connection: close"而不是"Connection: upgrade"可能是由于请求的特性、后端应用程序的支持限制或中间代理服务器的限制等因素造成的。具体情况需要根据实际场景来判断。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

基于websocket单台机器支持百万连接分布式聊天(IM)系统

,我们需要对http协议进行升级为websocket协议 对http请求协议进行升级 golang 库gorilla/websocket 已经做得很好了,我们直接使用就可以了 在实际使用的时候,建议每个连接使用两个协程处理客户端请求数据和客户端发送数据...$http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Connection.../link/server/tengine/sbin/nginx -t 如果出现错误 nginx: [emerg] unknown "connection_upgrade" variable configuration...upgrade; '' close; } ........、对外部系统两个接口(查询用户是否在线、给在线的用户推送消息),实现业务的分离 只有和业务分离可,才可以供多个业务使用,不是每个业务都建立一个长连接 8.2 已经实现的功能 gin log日志(请求日志

7K42

Nginx代理WebSocket方法

一个是WebSocket是一个逐跳协议,因此当代理服务器拦截客户端的升级请求时,需要向后端服务器发送自己的升级请求,包括相应的头文件。...此外,由于WebSocket连接长期存在,与HTTP使用的典型短期连接相反,反向代理需要允许这些连接保持打开状态,不是关闭它们,因为它们似乎处于空闲状态。...允许在客户机和后端服务器之间建立隧道,Nginx支持WebSocket。对于NGINX将升级请求从客户端发送到后台服务器,必须明确设置UpgradeConnection标题。...default upgrade; '' close; } 「解释一下map指令的作用:」该作用主要是根据客户端请求中 connection_upgrade的值,即根据变量 connection_upgrade...http是浏览器发起服务器的连接,服务器预先并不知道这个连接。 ❞ 「WebSocket与Http联系」WebSocket在建立握手时,数据是通过HTTP传输的。

5.7K30
  • Request Smuggling Via HTTP2 Cleartext

    proxy_set_header Connection $http_connection; } location /flag { deny all; } 对于后端服务器...\n") checkErr(server.ListenAndServe(), "while listening") } 按照预期直接/endpoint的代理发送请求成功,请求/flag失败...我们能够成功访问受限制的端点(-x指定代理): https://github.com/BishopFox/h2csmuggler 该行为如下图所示: 让我们来分析一下刚刚发生的事情: h2cSugglerNGINX...反向代理上的端点发送HTTP/1.1升级请求 代理将升级和连接头转发到后端后端以"101交换协议"响应,并准备接收HTTP2通信 从后端接收到101响应后,代理将连接"升级"到非托管TCP隧道 收到来自代理的...要使h2c走私成功需要将Upgrade标头(有时还有Connection标头)从边缘服务器成功转发到支持h2c升级的后端服务器,此配置可以发生在任何反向代理、WAF或负载平衡器上 默认情况下以下服务会在代理传递期间转发

    1.1K10

    Nginx支持WebSocket反向代理-学习小结

    此外,由于WebSocket连接长期存在,与HTTP使用的典型短期连接相反,反向代理需要允许这些连接保持打开状态,不是关闭它们,因为它们似乎处于空闲状态。...允许在客户机和后端服务器之间建立隧道,NGINX支持WebSocket。对于NGINX将升级请求从客户端发送到后台服务器,必须明确设置UpgradeConnection标题。...default upgrade; '' close; } map指令的作用: 该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade...其中的规则没有做匹配,因此使用默认的,即 $connection_upgrade 的值会一直是 upgrade。然后如果 $http_upgrade为空字符串的话, 那值会是 close。...http是浏览器发起服务器的连接,服务器预先并不知道这个连接。 WebSocket与Http联系 WebSocket在建立握手时,数据是通过HTTP传输的。

    3K40

    Nginx 作为 WebSockets 代理

    一项挑战是WebSocket是一个hop-by-hop协议,所以,当代理服务器拦截到一个客户端发来的Upgrade请求时,它(指服务器)需要将它自己的Upgrade请求发送后端服务器,也包括合适的请求头...此外,由于WebSocket连接是长时间保持的,所以代理服务器需要允许这些连接处于打开状态,不是像对待HTTP使用的短连接那样将其关闭。...为了使NGINX可以将来自客户端的Upgrade请求发送后端服务器,UpgradeConnection的头信息必须被显式的设置。...我们希望NGINX去代理这些请求,通过下面的配置便可实现: map $http_upgrade $connection_upgrade { default upgrade; '' close...$http_upgrade; proxy_set_header Connection "Upgrade"; } } 上面的配置会使NGINX监听8020端口,并把接收到的任何请求传递给后端

    1.2K10

    WebSocket与Nginx的小秘密

    修改DNS命名空间:放在Web服务器之前的代理服务器,替代物,会直接假扮Web服务器的名字和IP地址 修改Web服务器:将Web服务器配置为客户端发送一条HTTP重定向命令,将客户端的请求重定向到代理服务器上...会因为转发给缓存/代理服务器失效),为了让Nginx代理服务器可以将来自客户端的Upgrade请求发送后端服务器,要求UpgradeConnection的头信息必须被显式的设置。...代理服务器分别与客户端和服务器建立连接,由于WebSocket连接是长时间保持的,所以代理服务器需要允许这些连接处于打开状态,不是像对待HTTP使用的短连接那样将其关闭。...2.HTTP的Upgrade协议头机制用于将连接从HTTP连接升级到WebSocket连接,Upgrade机制使用了Upgrade协议头和Connection协议头;为了让Nginx可以将来自客户端的Upgrade...请求发送后端服务器,UpgradeConnection的头信息必须被显式的设置。

    1.7K20

    「应用中间件」使用NGINX作为WebSocket代理

    此外,由于WebSocket连接是长寿命的,与HTTP使用的典型短寿命连接相反,反向代理需要允许这些连接保持打开状态,不是因为它们看起来是空闲的关闭它们。...NGINX要将升级请求从客户端发送后端服务器,必须显式设置升级和连接头,如下例所示: location /wsapp/ { proxy_pass http://wsbackend; proxy_http_version...1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } 完成此操作后,NGINX...要有NGINX代理这些请求,我们创建以下配置: http { map $http_upgrade $connection_upgrade { default upgrade; '' close;...$http_upgrade; proxy_set_header Connection $connection_upgrade; } } } NGINX监听端口8020并将请求代理到后端WebSocket

    1.6K50

    nginx,ingress-nginx日常维护及报错

    : Connection refused) while sending request to upstream" Nginx和upstream连接成功后发送数据时,若遇到后端upstream挂掉或者不通...按照TCP的四次握手原理,这时候本端socket应该也要开始执行close的操作流程了,不是接着收发数据。...你可以配置 lingering_close off 禁用此行为,但这不是推荐的做法,因为会违反 HTTP 协议。...按照TCP的四次握手原理,这时候本端socket应该也要开始执行close的操作流程了,不是接着收发数据。...; 以上两个配置可以保证连接断开都是 nginx 发起的,从而可以避免一个已经关闭的连接发送请求; 默认行为 nginx的upstream中没有明确keepalive,无论client和nginx之间是否有长连接

    12.5K21

    WebSocket新手入门指南

    Q:WebSocket 和 Socket 的区别 A:Socket 不是协议,是应用层与 TCP/IP 通信的中间软件抽象层,是一组接口。 WebSocket 是应用层协议。...轮询:客户端定时服务端发送 http 请求,服务端收到请求后立即返回响应信息并关闭连接; 长轮询:为了解决轮询无效请求过多的问题,长轮询进行了优化,服务端收到请求后先阻塞,必要时再返回数据并关闭连接,...3.1 浏览器发起一个 http 请求建立连接 请求地址以ws://开头,请求头Upgrade: websocket和Connection: Upgrade表示这个连接将要被转换为 WebSocket...Upgrade $http_upgrade和proxy_set_header Connection "Upgrade", 配置后,当 Nginx 代理服务器拦截到客户端发来的 Upgrade 请求时,...$http_upgrade; proxy_set_header Connection "Upgrade"; } # 拦截普通 http 请求 location

    1.6K10
    领券