How to know if a request is http or https in node.js

express, node.js

Solution

Edit: For Express, it's safer and recommended to use `req.secure` (as @Andy recommends below). While it uses a similar implementation, it will be safe for future use and it also optionally supports the `X-Forwarded-Proto` header.

That being said, for your use case it would be quicker to use Express' `req.protocol` property, which is either `http` or `https`. Note, however, that for outgoing links, you can just refer to `//example.com/path`, and the browser will use the current protocol. (See also Can I change all my http:// links to just //?)

For node `Request` object without Express:

It's in `req.connection.secure` (boolean).

Edit: The API has changed, for Node 0.6.15+:

An HTTPS connection has `req.connection.encrypted` (an object with information about the SSL connection). An HTTP connection doesn't have `req.connection.encrypted`.

Also (from the docs):

With HTTPS support, use request.connection.verifyPeer() and request.connection.getPeerCertificate() to obtain the client's authentication details.

Problem

I am using nodejs and expressjs. I wonder if there is something like `request.headers.protocol` in the clientRequest object. I would like to build the baseUrl for the web links. So if the request was done via https I would like to keep https in all links. ``` var baseUrl = request.headers.protocol + request.headers.host; ```

Original source

Related problems