<!-- Love localstack? Please consider supporting our collective:
👉  https://opencollective.com/localstack/donate -->

# Type of request: This is a ...

[*] bug report
[ ] feature request

# Detailed description

Sending CloudWatch metrics data using `content-encoding: gzip` encoding results in 404. The same metrics sent uncompressed using `content-encoding: identity` returns 200 OK.

The metrics compressed with `content-encoding: gzip` work against AWS CloudWatch.

According to [CloudWatch documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html) `PutMetricData` accepts `gzip` compressed payloads but the docs are not clear on content-encoding at that point.

> Each PutMetricData request is limited to 40 KB in size for HTTP POST requests. You can send a payload compressed by gzip. Each request is also limited to no more than 20 different metrics.

## Expected behavior

I expected `localstack` `cloudwatch` to be able to receive `gzip` encoded payloads.

## Actual behavior

`encoding: gzip` results in HTTP error 404.

# Steps to reproduce

The Elixir library `telemetrics_library_cloudwatch` uses `gzip` compression by default. I configured a bunch of metrics and configured the library to periodically send the metrics. This resulted in 404 failures.

The requests against the `localstack` container started working when I commented out the `gzip` content type setting in line 12 of `TelemetryMetricsCloudWatch.Cloudwatch` module [here](https://github.com/bmuller/telemetry_metrics_cloudwatch/blob/2293af20e80c058338c8d4248191518642484986/lib/telemetry_metrics_cloudwatch/cloudwatch.ex#L12)

Apologies for not having simpler steps to reproduce.

## Command used to start LocalStack

Docker Compose with following settings:

```
  localstack:
    image: localstack/localstack:0.12.3
    restart: always
    environment:
      - SERVICES=s3,cloudwatch
      - DEFAULT_REGION=eu-west-2
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
      - DOCKER_HOST=unix:///var/run/docker.sock
      - HOST_TMP_FOLDER=/tmp/localstack
    ports:
      - 4566-4599:4566-4599
    volumes:
      - /tmp/localstack:/tmp/localstack
      - /var/run/docker.sock:/var/run/docker.sock
```

## Client code (AWS SDK code snippet, or sequence of "awslocal" commands)



from localstack.utils import persistence
import re
import os
import sys
import gzip
import json
import signal
import logging
import threading
from requests.models import Response
from localstack import config
from localstack.services import plugins
from localstack.dashboard import infra as dashboard_infra
from localstack.utils.aws import aws_stack
from localstack.constants import (
    HEADER_LOCALSTACK_TARGET, HEADER_LOCALSTACK_EDGE_URL, LOCALSTACK_ROOT_FOLDER,
    PATH_USER_REQUEST, LOCALHOST, LOCALHOST_IP)
from localstack.utils.common import (
    empty_context_manager, run, is_root, TMP_THREADS, to_bytes, truncate, to_str,
    get_service_protocol, in_docker, safe_requests as requests)
from localstack.services.infra import PROXY_LISTENERS
from localstack.utils.aws.aws_stack import Environment, is_internal_call_context
from localstack.services.generic_proxy import ProxyListener, start_proxy_server, modify_and_forward
from localstack.services.sqs.sqs_listener import is_sqs_queue_url
from localstack.utils.server.http2_server import HTTPErrorResponse
from localstack.utils.aws.aws_stack import set_default_region_in_headers
LOG = logging.getLogger(__name__)
HEADER_KILL_SIGNAL = 'x-localstack-kill'
BOOTSTRAP_LOCK = threading.RLock()
class ProxyListenerEdge(ProxyListener):