【问题标题】:Where is `onconnect` event in express?快递中的“onconnect”事件在哪里?
【发布时间】:2017-01-16 08:24:56
【问题描述】:

使用“express”我设置了这个中间件:

app.use(function(request, response, next) {
    console.log(request.headers["user-agent"]);
    // etc.
});

以便在每次请求时,它的 user-agent 标头都会显示在控制台中。
但是你现在user-agent 可能是多么的混乱:

Mozilla/5.0 (Linux; Android 7.1.1; Nexus 5X Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.59 Mobile Safari/537.36

我真的想在每个连接上输出一次标头——而不是在每个请求上。

我该怎么做?

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    对 HTTP 堆栈(服务器)的每个请求每次都会建立一个新连接。这就是 HTTP 协议的工作原理

    编辑:

    如果您需要跟踪访问者,您可以使用 cookie 或更好的会话。这些将随每个请求一起发送给您,当您没有找到任何附件时,您就知道这是一个“新连接”

    您可以为此目的使用express-session

    【讨论】:

    • 我相信,"connection" : "keep-alive" 有一些有趣的地方
    • mdn 声明这是非标准的......坦率地说,我确实认为会话更适合您的情况并受到所有现代浏览器的支持
    【解决方案2】:

    我不认为这在express 中暴露,这是一件好事,因为您最不想处理的就是自己处理 HTTP 1.1 keep alive 的问题。

    我会在一次发生的请求上记录user-agent,可能是用户身份验证请求或类似的请求。

    编辑:为了扩展第二部分,标准身份验证流程之一可能如下:

    1. 用户发布凭据
    2. 服务器返回一个令牌
    3. 用户使用令牌访问 API

    因此,您可以在用户获得令牌时记录user-agent,并在每个其他请求中记录该令牌。这样,您可以轻松地在初始身份验证请求中搜索用户代理的日志文件。此令牌可以是会话 ID,使用像 express-session 这样的包,或者更强大的身份验证令牌。

    您还可以在用户通过身份验证后将该user-agent 值存储在会话对象服务器端,并添加中间件,在每个请求的trace 日志中记录会话。这样,您可以在每个请求上启用会话记录,并在需要时查看user-agent

    【讨论】:

    • 感谢您的回答。请澄清第二部分,我没有明白这一点。
    • 哦,我知道了。您是在谈论一个“有点特殊”的用户请求,这种请求不会超过一次,对吗?
    • 是的!我已经扩展了一些描述。
    猜你喜欢
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多