服务器发送响应但客户端未加载发送的内容

Nis*_*sai 6 javascript browser node.js express

我有简单的节点服务器(nodejs + express + ejs渲染),当用户试图加载特定的页面服务器发送编译的html并发送响应时.

为了跟踪用户,我添加了2个计数器

一个.计数器,当服务器收到该页面的请求时递增

湾 当客户端加载页面时,它包含一些代码,这些代码会将HTTP请求发送回我用作计数器的服务器

现在的问题是,随着时间的推移上的区别sentResponse柜台和clientLoad柜台的增大而增大,以至于我得到sentResponse = 7000clientLoad = 3600.

关于什么可能导致这种行为的任何建议

注意:在请求到达我的服务器之前我也设置了Cloudfare并且我暂停了它但是我仍然遇到了巨大的差异?

注意:我也注意到很多用户经常在4s以下多次向页面发出请求,但我确信我发送的是有效的html而且我的差异几乎是50%所以我不认为每个访问该页面的用户都是在4s下按ctrl + r 2次或更多次.

码:

server.js

app.get('/dashboard', (res, res) => {
    ...
    ...
    ...

    Tracker.incrementCount('sentResponse');
    res.render(page.ejs, {...});
});

app.get('/client-load-start', (req, res) => {
    Tracker.incrementCount('clientLoadStart');
    res.send(200);
});
Run Code Online (Sandbox Code Playgroud)

page.ejs

<html>
    <head>
        ...
        <script src='/client-load-start?version=<some_random_4_digit_number>'></script>
        ...
    </head>

    <body>
        ...
        ...
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

小智 1

关于为什么计数可能不同,我可以想到以下可能性。

  • 设置缓存标头(Cache-Control)可能会导致浏览器缓存请求。
  • 客户端浏览器中未启用 JS,因此不可能对服务器进行 AJAX 调用来更新 clientLoad 计数器(这种可能性较小,但仍然是可能性之一)。
  • 人们甚至在页面加载之前就与页面进行交互,导致 AJAX 调用无法触发。人们在页面加载之前重新加载了页面。

如果您只是想追踪