The form POST operation to S3 accepts a `success_action_status` field which can be set to 200/201/204, see [here](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html). Localstack currently handles the `success_action_redirect` field [here](https://github.com/localstack/localstack/blob/master/localstack/services/s3/s3_listener.py#L518) and so we should look into handling the `success_action_status` field too.

The 201 from AWS responds with an XML document with some fields about the object that has just been created in AWS, see below.

```
<PostResponse>
    <Location>https://s3.amazonaws.com/link-to-the-file</Location>
    <Bucket>s3-bucket</Bucket>
    <Key>development/8614bd40-691b-4668-9241-3b342c6cf429/image.jpg</Key>
    <ETag>"32-bit-tag"</ETag>
</PostResponse>
```
bucket_name = normalize_bucket_name(bucket_name)
        host = config.HOSTNAME_EXTERNAL
        if ':' not in host:
            host = '%s:%s' % (host, config.PORT_S3)
        return re.sub(r'<Location>\s*([a-zA-Z0-9\-]+)://[^/]+/([^<]+)\s*</Location>',
            r'<Location>%s://%s/%s/\2</Location>' % (get_service_protocol(), host, bucket_name),
            content, flags=re.MULTILINE)
    @staticmethod
    def is_query_allowable(method, query):
        
        if not query:
            return True
        
        contains_cred = 'X-Amz-Credential' in query and 'X-Amz-Signature' in query
        contains_key = 'AWSAccessKeyId' in query and 'Signature' in query
        if (method == 'POST' and query.startswith('uploadId')) or contains_cred or contains_key:
            return True
UPDATE_S3 = ProxyListenerS3()