Skip to content

Potential breaking change on v14.17.0 #38922

@mmarchini

Description

@mmarchini
  • Version: v14.17.0
  • Platform: OS X
  • Subsystem: http

What steps will reproduce the bug?

Run the snippet below (from How do I create a HTTP server):

const http = require('http');

const requestListener = function (req, res) {
  res.writeHead(200);
  res.end('Hello, World!');
}

const server = http.createServer(requestListener);
server.listen(8080);

And call the server with the following command:

curl -i localhost:8080 -X HEAD

Running the server on v14.16.1, the curl command will return 0 with the following output:

$ curl -i localhost:8080 -X HEAD
Warning: Setting custom HTTP method to HEAD with -X/--request may not work the
Warning: way you want. Consider using -I/--head instead.
HTTP/1.1 200 OK
Date: Fri, 04 Jun 2021 04:15:27 GMT
Connection: keep-alive
Keep-Alive: timeout=5

Running the server on v14.17.0, the curl command will exit with code 18 and the following error:

$ curl -i localhost:8080 -X HEAD
Warning: Setting custom HTTP method to HEAD with -X/--request may not work the
Warning: way you want. Consider using -I/--head instead.
HTTP/1.1 200 OK
Date: Fri, 04 Jun 2021 04:16:58 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Transfer-Encoding: chunked

curl: (18) transfer closed with outstanding read data remaining

How often does it reproduce? Is there a required condition?

Always

What is the expected behavior?

Within a major, no header that could potentially destructively affects HTTP clients behavior should be introduced.

What do you see instead?

Transfer-Encoding: chunked is introduced, causing curl to exit with an error code.

Additional information

I noticed this error on this Restify test recently. I'm not entirely sure if this should be considered a breaking change, but it seems like one. I couldn't determine which commit introduced it yet though.

cc @nodejs/http (and @nodejs/tsc @nodejs/lts for visibility)

Metadata

Metadata

Assignees

No one assigned

    Labels

    httpIssues or PRs related to the http subsystem.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions