### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

Local bucket's CORS policy:

```
$ aws s3api get-bucket-cors --bucket foo --endpoint-url=http://localhost:4566                                                          
{
    "CORSRules": [
        {
            "AllowedHeaders": [
                "*"
            ],
            "AllowedMethods": [
                "GET",
                "PUT"
            ],
            "AllowedOrigins": [
                "http://*.example.com",
                "https://app.localstack.cloud",
                "http://app.localstack.cloud"
            ]
        }
    ]
}
```

Doing OPTIONS preflight through curl:
`curl -v --request OPTIONS 'http://127.0.0.1:4566/foo/' -H 'Origin: http://subd.example.com' -H 'Access-Control-Request-Method: GET'`

Returns:
```
< HTTP/1.1 403 
< Content-Type: application/xml
< Content-Length: 534
< x-amz-request-id: 2432170e-f270-42a8-91fe-2b8415cada4a
< x-amz-id-2: s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=
< Connection: close
< date: Fri, 19 Jan 2024 20:26:37 GMT
< server: hypercorn-h11
< 
<?xml version='1.0' encoding='utf-8'?>
* Closing connection
<Error><Code>AccessForbidden</Code><Message>CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Request-Headers are not whitelisted by the resource's CORS spec.</Message><RequestId>2432170e-f270-42a8-91fe-2b8415cada4a</RequestId><HostId>9Gjjt1m+cjU4OPvX9O9/8RuvnG41MRb/18Oux2o5H5MY7ISNTlXN+Dz9IG62/ILVxhAGI0qyPfg=</HostId><Method>GET</Method><ResourceType>OBJECT</ResourceType></Error>%   
```

### Expected Behavior

Would expect an OPTIONS call to e.g. `http://subd.example.com` to return 200 OK. I have tested this against real S3 and this works.

Documentation: https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html#cors-allowed-origin

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

See above.

### Environment

```markdown
- OS: macOS Sonoma 14.2.1
- LocalStack: latest
```


### Anything else?

_No response_
"""
            Stops the chain to avoid the OPTIONS request being parsed. The request is ready to be returned to the
            client. We also need to add specific headers normally added by the serializer for regular requests.
            """
            request_id = context.request_id
            response.headers["x-amz-request-id"] = request_id
            response.headers[
                "x-amz-id-2"
            ] = f"MzRISOwyjmnup{request_id}7/JypPGXLh0OVFGcJaaO3KW/hRAqKOpIEEp"
            response.set_response(b"")
            response.headers.pop("Content-Type", None)
            chain.stop()
        
        if not (origin := request.headers.get("Origin")):
            if is_options_request:
                context.operation = self._get_op_from_request(request)
                raise BadRequest(
                    "Insufficient information. Origin request header needed.", HostId=FAKE_HOST_ID
                )
            else:
                
                
                return
        is_origin_allowed_by_default = is_origin_allowed_default(request.headers)