moll/node-mitm

mitm return 400 on custom methods

Oloompa opened this issue · 4 comments

RFC 2616 and 7540 allow use of custom methods.

When we use other methods, mitm always return 400 without running request event.

moll commented

Hey,

While I'm not sure what responds with 400 instead of just blowing up, you're right that Mitm.js doesn't seem to support custom HTTP methods. Node.js v6 for example just throws "socket hang up". Turns out Node.js' web server itself doesn't support custom HTTP methods — nodejs/node-v0.x-archive#3192. That came as a surprise to me. Because Mitm.js delegates HTTP request parsing to Node.js itself, Mitm.js can't support custom methods out of the box either.

If you've got a custom HTTP parser, you could, however, hack support for that, I suppose, by overwriting Mitm.prototype.request (https://github.com/moll/node-mitm/blob/master/index.js#L146) and not invoking the default Http._connectionListener. Instead, get the request body from the socket.serverSocket and parse that yourself, finally triggering request on the Mitm instance.

Let me know what you decide to do.

I didn't notice nodejs was blocking custom methods.
The "issue" has been open in 2012 for nodejs without any move.
I will probably take a look on deno.

moll commented

I didn't know that either. Seems like a fairly arbitrary limitation on Node.js's part.
I'll close the issue as there's not much to do right now, but we can continue chatting.