【问题标题】:Removing all headers from express.js从 express.js 中删除所有标头
【发布时间】:2013-09-15 10:29:38
【问题描述】:

我正在创建一个页面,其中有一些数据会被另一台设备解析。我以前用 php 做这个,但我把它移到 node.js 上。我需要从页面中删除所有标题,所以我只有我的输出。此输出是对 GET 请求的响应。

目前有

HTTP/1.1 200 OK
Date: Wed, 11 Sep 2013 11:54:14 GMT
Connection: close

My output

我需要它来显示

My output

【问题讨论】:

    标签: javascript node.js http express http-headers


    【解决方案1】:

    通常,您可以使用 Express (node.js) 中的 Response 对象的 API 来删除标头,但是,其中一些是 HTTP 规范所要求的,并且应该始终存在。

    Date 标题是必需的。见这里:https://stackoverflow.com/a/14490432/1801

    第一行 (HTTP/1.1 200 OK) 不是标头 - 它是 HTTP 协议的一部分,每个响应都应以它开头。否则浏览器将不知道如何处理响应。

    如果要删除其他自定义标头,可以这样做:

    app.get('/test', function (req, res) {
        var body = "some body";
        res.removeHeader('Transfer-Encoding');
        res.removeHeader('X-Powered-By');
        res.end(body);
    });
    

    【讨论】:

    • 问题是这是一个直接解析数据的嵌入式设备。没有网络浏览器。所以不需要标题。 PHP 没有生成它们
    • 那我觉得你一般不应该使用HTTP吗?
    【解决方案2】:

    Express 不会这样做,因为 Express 用于 HTTP。您要求的不是 HTTP,因为它不遵循某些 RFC。要做你想做的事,你必须绕过快递。监听端口,解析来自嵌入式设备的GET请求,发送你想要的数据。

    【讨论】:

      【解决方案3】:

      如果可以更改其他设备上的代码,则更标准的解决方案是设备忽略 HTTP 标头并仅解析正文。

      【讨论】:

        【解决方案4】:
        app.use(function (req, res, next) {
            res.removeHeader("x-powered-by");
            res.removeHeader("set-cookie");
            res.removeHeader("Date");
            res.removeHeader("Connection");
             next();
        });
        

        有关更多详细信息,请查看此文档以获得解释所有 http 标头相关查询的最佳方式:: Express (node.js) http header docs

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-24
          • 2019-02-22
          • 2018-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-02
          相关资源
          最近更新 更多