### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

Currently, when using localstack S3 to generate a presigned upload that has metadata written into the object, the metadata is not persisted to the object. Resulting in no metadata being returned when `aws s3api head-object` is executed.

### Expected Behavior

As a localstack user
I want localstack S3 to correctly persist the metadata into the s3 object when using a presigned upload
So that I can test if my presign upload feature is working as expected

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

#### How are you starting localstack (e.g., `bin/localstack` command, arguments, or `docker-compose.yml`)

```
# docker-compose.yml

    localstack:
        image: ${DEP_PROXY_PREFIX}/localstack/localstack:2.3
        hostname: localstack
        ports:
            - 4566:4566
        environment:
            Services: 's3,sqs,sns'
            AWS_ACCESS_KEY_ID: localstack
            AWS_SECRET_ACCESS_KEY: localstack
            AWS_DEFAULT_REGION: eu-central-1
            EAGER_SERVICE_LOADING: 1
        volumes:
            - localstack:/var/lib/localstack
            - '/var/run/docker.sock:/var/run/docker.sock
```

```bash
docker compose up
```
#### Client commands (e.g., AWS SDK code snippet, or sequence of "awslocal" commands)

```typescript
// test.ts
import { HeadObjectCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
import { uploadFileViaHttp } from './tests/integration/scripts';
import { randomBytes } from 'crypto';

async function runError() {
    const client = new S3Client({
        region: 'eu-central-1',
        endpoint: 'http://localhost:4566',
        forcePathStyle: true
    });
    const buffer = randomBytes(100);

    const initialMetaData = {
        firstid: 'b8066141-3c1a-4c10-96a7-0664aeebe2aa',
        secondid: '800001',
        thirdid: 'b0372e50-f4f3-4ae2-9a44-7b8c70604cf4'
    };
    const putObjectCommand = new PutObjectCommand({
        Bucket: 'my-test-bucket',
        Key: 'test-key.txt',
        ContentLength: buffer.length,
        Metadata: initialMetaData
    });

    const url = await getSignedUrl(client, putObjectCommand);

    // simply uploads the buffer with a PUT request
    await uploadFileViaHttp(url, buffer);

    const headObjectCommand = new HeadObjectCommand({
        Bucket: 'my-test-bucket',
        Key: 'test-key.txt'
    });

    const response = await client.send(headObjectCommand);


    console.log(`Expected Metadata`, initialMetaData);
    console.log('Received Metadata', response.Metadata);
}

runError().then(() => {
    console.log('done');
});
```

```bash
ts-node ./test.ts
```

When this script is run with Localstack 2.3 (f7c3a25c88a7) this works fine.

### Environment

```markdown
- OS: 22.04
- LocalStack: latest (c31daa9ad74a)
```


### Anything else?

Error only occurrs on newer localstack version.

Thank you for the good work on the project! Love it!
# forw
        # (dat
        key = "test-double-headers"
        aws_client.s3.put_(Bucket=s3_bucket, Key=key, Body="test-headers", ACL="public-read")
        key_url = f"{_bucket_url(bucket_name=s3_bucket)}/{key}"
        response = .get(key_url)
        assert response.headers["server"]
        key_url = f"{_bucket_url_vhost(bucket_name=s3_bucket)}/{key}"
        proxied_response = .get(key_url)
        assert proxied_response.ok
        assert proxied_response.headers["server"] == response.headers["server"]
        assert len(proxied_response.headers["server"].split(",")) == 1
        assert len(proxied_response.headers["date"].split(",")) == 2  # coma 
    @markers.aws.validated
    def test_s3_sse_validate_kms_key(