How to implement the response to the TRACE request in express.js?

Issue

The HTTP TRACE method performs a message loop-back test along the path to the target resource, providing a useful debugging mechanism. The final recipient of the request should reflect the message received back to the client as the message body of a 200 (OK) response with a Content-Type of message/http.

Example of an HTTP request with the TRACE method:
enter image description here

Example of a response to a request with the TRACE method:
enter image description here

const path = require( 'path' );
const express = require( 'express' );      // version 4.x
const favicon = require( 'serve-favicon' );

const app = express();

app .use( favicon( path.join( __dirname, 'assets', 'logo.ico' ) ) );

app.trace( '*', ( req, res ) => {
  // how do I return the entire request in its original form in response?
} );

Solution

The request argument in Express is actually a modified node.js http.IncomingMessage object so you can get all the request data from it:

app.trace( '*', ( req, res ) => {
    res.end(
        `${req.method} ${req.url} HTTP/${req.httpVersion}\r\n` +
        req.rawHeaders.join('\r\n')
    )
});

This would generally re-create the request but because you are reconstructing it instead of simply copying it there may be small differences.

Answered By – slebetman

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published