Blog

Multipart uploads to S3 from the browser: CORS, ETag in Expose-Headers, and completing parts

Expose ETag so JavaScript can send complete multipart requests; bucket CORS must list ETag in ExposeHeaders.

1 min read
s3uploadcors

Presigned URL flows

Generate presigned URLs server-side with tight expiry; never trust client-provided bucket names.

ListParts responses also need consistent CORS if you resume uploads from the browser.

Security

Block public ACLs on buckets used for user content; CORS open buckets are a data exfiltration risk.

Scan uploads asynchronously—do not block CORS preflight on malware scanning.

Back to blog