## Is your feature request related to a problem?

When sending incorrectly formatted payloads (e.g. a text-based string with a `gzip` compression header), the app will fail with a cryptic 500 error and register an unhandled exception.

## Describe the solution you'd like
The app should return a 400 bad request error, with details on why the request failed (i.e. it is incorrectly formatted or the content does not match the compression specified). In addition, this shouldn't be treated as an unhandled exception as it's a client error.


## Describe alternatives you've considered
Keep returning a cryptic 500 error.


## Additional context
Relevant context on #2701


#### *Thank you* for your feature request – we love each and every one!

posthog/api/test/test_user.py
import uuid
from unittest.mock import patch
from rest_framework import status
from posthog.models import Team, User
from posthog.models.organization import Organization, OrganizationMembership
from posthog.test.base import APIBaseTest
class TestUserAPI(APIBaseTest):
    new_org: Organization = None  
    new_project: Team = None  
    CONFIG_PASSWORD = "testpassword12345"
    def _assert_current_org_and_team_unchanged(self):
        self.user.refresh_from_db()
        self.assertEqual(self.user.current_team, self.team)
        self.assertEqual(self.user.current_organization, self.organization)
    @classmethod
    def setUpTestData(cls):
        super().setUpTestData()
        cls.new_org = Organization.objects.create(name="New Organization")
        cls.new_project = Team.objects.create(name="New Project", organization=cls.new_org)
        cls.user.join(organization=cls.new_org)
        cls.user.current_organization = cls.organization
        cls.user.current_team = cls.team
        cls.user.save()
    
    def test_retrieve_current_user(self):