Using s3 range request with localstack causes incorrect content type to be returned & some metadata to be missing:
To reproduce, put object:
`aws s3api put-object --endpoint http://localhost:3006 --bucket some-bucket --key some-dir/some-key --body text.txt --content-type text/plain --content-language en-US --cache-control no-cache`

And compare regular request vs range one:
`aws s3api get-object --endpoint http://localhost:3006 --bucket some-bucket --key some-dir/some-key output.txt --range bytes=0-3`
`aws s3api get-object --endpoint http://localhost:3006 --bucket some-bucket --key some-dir/some-key output.txt`

This works correctly (returns the same metadata regardless of using `--range bytes=0-3`) on aws s3.

Also:
Getting object with/without `range bytes=0-3` should return header "AcceptRanges: bytes" but it doesn't.
if method != 'GET' or path != '/':
        return
    response._content = re.sub(r'([0-9])</CreationDate>', r'\1Z</CreationDate>', to_str(response._content))
def fix_etag_for_multipart(data, headers, response):
    
    if headers.get(CONTENT_SHA256_HEADER) == STREAMING_HMAC_PAYLOAD:
        try:
            if b'chunk-signature=' not in to_bytes(data):
                return
            correct_hash = md5(strip_chunk_signatures(data))
            tags = r'<ETag>%s</ETag>'
            pattern = r'(&#34;)?([^<&]+)(&#34;)?'
            replacement = r'\g<1>%s\g<3>' % correct_hash
            response._content = re.sub(tags % pattern, tags % replacement, to_str(response.content))
            if response.headers.get('ETag'):
                response.headers['ETag'] = re.sub(pattern, replacement, response.headers['ETag'])
        except Exception:
            pass
def remove_xml_preamble(response):