Skip to content

HTTP Parser issues with newline \n #34576

Closed
@ronag

Description

@ronag

The following issue was found while working against a CouchDB changes stream which uses a newline \n as a form of a heartbeat on a long polling connection.

OS: MacOS, Node 14.6

Will invoke kOnTimeout after kOnHeadersComplete. Also will stop invoking kOnExecute but will keep invoking kOnBody.

Refs: nodejs/undici#268
Refs: nodejs/undici#269

const net = require('net')
const { HTTPParser } = process.binding('http_parser') // eslint-disable-line

net.createServer(socket => {
  socket.write('HTTP/1.1 200 OK\r\n')
  socket.write('Transfer-Encoding: chunked\r\n\r\n')
  setInterval(() => {
    socket.write('1\r\n')
    socket.write('\n\r\n')
  }, 500)
}).listen(3111)

const socket = net.connect(3111, '127.0.0.1')
const parser = new HTTPParser(HTTPParser.RESPONSE, false)
parser.initialize(
  HTTPParser.RESPONSE,
  {},
  0,
  false,
  1e3
)

parser[HTTPParser.kOnTimeout] = () => {
  console.log('kOnTimeout')
}

parser[HTTPParser.kOnHeaders] = (rawHeaders) => {
  console.log('kOnHeaders')
}

parser[HTTPParser.kOnExecute] = (ret) => {
  console.log('kOnExecute')
}

parser[HTTPParser.kOnHeadersComplete] = (versionMajor, versionMinor, rawHeaders, method,
  url, statusCode, statusMessage, upgrade, shouldKeepAlive) => {
  console.log('kOnHeadersComplete')
}

parser[HTTPParser.kOnBody] = (chunk, offset, length) => {
  console.log('kOnBody')
}

parser[HTTPParser.kOnMessageComplete] = () => {
  console.log('kOnMessageComplete')
}

parser.consume(socket._handle)

Metadata

Metadata

Assignees

No one assigned

    Labels

    httpIssues or PRs related to the http subsystem.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions