首页 > 解决方案 > Node.js 快速发送原始 HTTP 响应

问题描述

我有一个遗留系统,可以将原始\纯 HTTP 响应作为字符串返回(包含所有必需标头 + 正文的文本)。

出于性能原因,我想直接发送此文本而不进行任何解析修改。

所以目标是代理收到的原始 HTTP 响应。

const express = require('express');
const app = express();
const router = app.Router();

        router.get('request',()=>{
           const plainTextWithHeadersFromExternalSystem = `HTTP/1.1 200 OK
                                   Date: Sun, 10 Oct 2010 23:26:07 GMT
                                   Server: Apache/2.2.8 (Ubuntu) mod_ssl/2.2.8 
                                   OpenSSL/0.9.8g
                                   Last-Modified: Sun, 26 Sep 2010 22:04:35 GMT
                                   ETag: "45b6-834-49130cc1182c0"
                                   Accept-Ranges: bytes
                                   Content-Length: 12
                                   Connection: close
                                   Content-Type: text/html

                                   Hello world!`;
           ... TODO: send text with headers and body as a response.
        });

它可以是任何内容类型,而不仅仅是纯文本。

任何想法是否可以简单地使用 Node.js express lib 代理它?

标签: javascriptnode.jsexpress

解决方案


我自己也遇到了同样的问题,不得不深入研究 Node 的核心httpnet模块来解决这个问题。

要跳过默认的 HTTP 响应行(例如 HTTP/1.1 200 OK)和 Express/Node.js 发送的所有标头,您可以直接通过响应的套接字发送文本。

const responseMessage = `HTTP/1.1 200 OK
Date: Sun, 10 Oct 2010 23:26:07 GMT
Content-Type: text/html
Content-Length: 13

Hello, World!

`

router.get('/request', (req, res) => {
  res.socket.end(responseMessage)
})

推荐阅读