Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BadRequestError: request size did not match content length #494

Closed
MudabbarHussain opened this issue Mar 4, 2023 · 7 comments
Closed

BadRequestError: request size did not match content length #494

MudabbarHussain opened this issue Mar 4, 2023 · 7 comments

Comments

@MudabbarHussain
Copy link

When I hit the API to get a user having the particular email I got the following error.
BadRequestError: request size did not match content length
here is:
request body:
{
"email":"ali@gmail.com"
}
Code snippet
this.router.get('/by-email', async (req, res) => {
try {
const {email} = req.body;
const data = await new userController().getOneUser(email);
res.status(200).send(data);
}
catch (error) {
res.send(error);
}
});
please help me to resolve this issue.

@dougwilson
Copy link
Contributor

Hi, and sorry you are having an issue. There isn't enough information to be able to diagnose your issue. Please, can you provide the exact method and details to reproduce this issue? Specifically the exact details to send the request.

@WilliamLoey
Copy link

Looking at your code snippet, it appears that you are using the HTTP GET method to retrieve a user by email, but you are passing the email as part of the request body. The HTTP GET method does not have a request body, so this is likely causing the issue.

To fix this, you can pass the email as a query parameter instead of in the request body. Here's an updated version of your code:

this.router.get('/by-email', async (req, res) => {
  try {
    const { email } = req.query;
    const data = await new userController().getOneUser(email);
    res.status(200).send(data);
  } catch (error) {
    res.send(error);
  }
});

@Brahmah
Copy link

Brahmah commented Dec 3, 2023

Just an FYI, I was getting the same error using this lib without express.

image

@dougwilson
Copy link
Contributor

Thank you for the update and sorry we have been unable to fix. Unfortunately without a reproducable example and code to demo we don't know what the problem is. You are always welcome to make a pull request qoth a fiz, or if you can provide a reproducable example we can reopen this issue and figure out what is happening and fix.

@Brahmah
Copy link

Brahmah commented Dec 3, 2023

Hey @dougwilson

Looks like the issue was with the raw-body dependency.

For my use, I've since patched the package with a fix

We started sporadically getting these errors since switching to uWebSockets.js with https://github.com/colyseus/uWebSockets-express, usually when the req body contained any chars that were larger than a single byte.

This is because chunks were measured via their char length instead of bytes...

I recognise that this isn't a documented canonical use of the library so your prerogative to determine what's best.

@dougwilson
Copy link
Contributor

dougwilson commented Dec 3, 2023

Ah, I see. The issue is actually not in raw-body, but in that uwebsockets lib. It will utf-8 decode the body before it sends it to raw-body:

https://github.com/colyseus/uWebSockets-express/blob/68c60fe77dba469021da85ce9fe4adda6d407eaa/src/IncomingMessage.ts#L166

https://github.com/colyseus/uWebSockets-express/blob/68c60fe77dba469021da85ce9fe4adda6d407eaa/src/IncomingMessage.ts#L178

This will of course mean any binary data will end up corrupted with that uwebsockets lib. It looks like that is why raw-body is unexpectedly getting a decoded string instead of Buffer objects like would happen with the actual Node.js http objects.

I would suggest fixing at the root cause instead of raw-body, as it would also fix corruption of non-utf-8 bodies too.

@Brahmah
Copy link

Brahmah commented Dec 3, 2023

Agreed @dougwilson, thanks for picking up on that!

This was merely a quick fix to bring back prod services after we found out about the regression affecting all requests from a particular client, until I could investigate further.

Agree that patching uwebsockets-express would be far more apposite so will get to that shortly...

https://github.com/colyseus/uWebSockets-express/blob/68c60fe77dba469021da85ce9fe4adda6d407eaa/src/IncomingMessage.ts#L178

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants