当前位置: 首页 > Web前端 > HTML5

关于服务器端呈现的web应用程序出现504错误的问题

时间:2023-04-05 23:46:58 HTML5

除非客户端在SSR中添加自定义逻辑以显式发送504,否则504不会来自SSR。在默认的Spartacus/SSR中,没有显式发送的逻辑a504。默认情况下它只发送200或500(仅当APP_INITIALIZER失败时)。我们在浏览器中看到这个504错误:发生错误。抱歉,您要查找的页面目前不可用。此错误消息由nginx生成并发送504(GatewayTimeout),根据MDN的意思是:504GatewayTimeout服务器错误响应代码表示服务器在充当网关或代理时,没有从服务器获取所需的响应上游服务器(upstreamserver)及时完成请求。在这种情况下,上游服务器是一个node.js服务器。node.js根本没有响应,因此nginx网关向客户端发回504错误代码。如果Node.js的响应速度太慢,Nginx会直接响应客户端发来的请求504错误码。在某些特殊情况下,相关请求在Dynatrace中实际上是不可见的。我的猜测是Dynatrace仅在请求完成时才记录该项目。因此,那些从未完成的将永远不会被Dynatrace记录。例如,某些请求逻辑进入无限循环(在Java代码中)导致线程永远不会结束并且请求从未记录在Dynatrace中。下面这段代码可以模拟Node.js主线程阻塞的场景:constshouldBlock=url.endsWith('?block-main-thread-super-long');console.log({url,shouldBlock});if(shouldBlock){this.blockMainThreadSuperLong();}}blockMainThreadSuperLong(){constSUPER_BIG_BUMER=1_000_000_000_000_000;for(leti=0;i{if(req.url.endsWith('?never-send-responses-anymore')){neverSendResponsesAnymore=true;}if(neverSendResponsesAnymore){return;}res.render(indexHtml,{req,providers:[{provide:APP_BASE_HREF,useValue:req.baseUrl}],});});下面突出显示的代码将导致SSR无法响应客户端请求:这两个代码均来自我的同事Kris。