Just started playing with Node.js and after seeing a few examples I see that usually the Content-Type
is set before returning some content.
Usually something like this for HTML:
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(html);
res.end();
For image:
res.writeHead(200, {'Content-Type': 'image/png'});
res.write(img, 'binary');
res.end();
I read the docs for .write() and it says if no header is specified "it will switch to implicit header mode and flush the implicit headers"
With some testing I found I can just write one line like so:
res.end(html); // or
res.end(img);
These both work fine. I also tested with my local Apache server and when I viewed the headers being set when loading an image there was no Content-Type
header set there.
Do I need to bother setting them? What situations or bugs might arise if I don't?
The Content-Type
header is technically optional, but then you are leaving it up to the browser to essentially guess what type of content you are returning. Generally you should always specify a Content-Type
if you know the type (which you probably do).
If you're using Express within your node app, then response.send(v)
will implicitly pick a default content-type depending on the runtime type of v
. More specifically, the behavior of express.Response.send(v)
is as follows:
v
is a string (and no content-type has already been set) then send Content-Type: text/html
v
is a Buffer (and no content-type has already been set) then send Content-Type: application/content-stream
v
is any other bool/number/object
(and no content-type has already been set) then send Content-Type: application/json
Here's the relevant source code from Express: https://github.com/expressjs/express/blob/e1b45ebd050b6f06aa38cda5aaf0c21708b0c71e/lib/response.js#L141
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With