node-restify icon indicating copy to clipboard operation
node-restify copied to clipboard

Additional content-type parameters are thrown away

Open ThomWright opened this issue 8 years ago • 1 comments

  • [x] Used appropriate template for the issue type
  • [x] Searched both open and closed issues for duplicates of this issue
  • [x] Title adequately and concisely reflects the feature or the bug

Bug Report

Restify Version

6.3.4

Node.js Version

8.9.1

Expected behaviour

Given the following code, I would expect the content-type string I set to be used.

res.contentType = "text/plain; version=0.0.4; charset=utf-8"
res.send(...)

Should produce:

Content-Type: text/plain; version=0.0.4; charset=utf-8

For context, the content-type I'm using comes from: Prometheus client, Prometheus docs

Actual behaviour

Only the contents of the string before the first ; are used, resulting in:

Content-Type: text/plain

Repro case

var restify = require('restify');

const server = restify.createServer({
  name: 'myapp',
  version: '1.0.0'
});

server.get('/test', function (req, res, next) {
  res.contentType = "text/plain; version=0.0.4; charset=utf-8"
  res.send(200, "some text")
  return next();
});

server.listen(8080, function () {
  console.log('%s listening at %s', server.name, server.url);
});

Cause

The string is split here, throwing away the rest:

https://github.com/restify/node-restify/blob/74e0cf55fc452931215280741516d30555d76f7a/lib/response.js#L466

Are you willing and able to fix this?

Maybe :smile:

Assuming there isn't some reason this is intended behaviour, I can have a look at fixing.

ThomWright avatar Jan 02 '18 15:01 ThomWright

Hey @ThomWright! Thank you for opening such a thorough bug report :heart:

I believe you are correct. If we are provided a content type by the user, we should use it. We currently support specifying a charSet explicitly which is added on line 493 but we don't have an option for configuring a version.

According to the RFC, everything that comes after the content-type is the media-type, and we should respect the user's request for a specific media-type.

The question I would have is: what effect does specifying a media-type have on the formatter for that content-type? Does the formatter need to be aware of the media-types being asked for?

I think the easiest thing to do here, for the short term, is to just append the media-type back to the type after resolving the formatter. Thoughts?

retrohacker avatar Feb 08 '18 22:02 retrohacker