To avoid the error "No 'Access-Control-Allow-Origin' header is present on the requested resource":
- Enable CORS on your S3 bucket
- Forward the appropriate headers on your CloudFront distribution
Enable CORS on S3 Bucket
In S3 -> [your bucket] -> Permissions -> Cross-origin resource sharing (CORS):
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
ref:
https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html
https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html
Configure Behaviors on CloudFront Distribution
In CloudFront -> [your distribution] -> Behaviors -> Create Behavior:
- Path Pattern: *
- Allowed HTTP Methods: GET, HEAD, OPTIONS
- Cached HTTP Methods: +OPTIONS
- Origin Request Policy: Managed-CORS-S3Origin
- This policy actually whitelists the following headers:
Access-Control-Request-Headers
Access-Control-Request-Method
Origin
- This policy actually whitelists the following headers:
ref:
https://aws.amazon.com/premiumsupport/knowledge-center/no-access-control-allow-origin-error/
Validate it's working:
fetch("https://metadata.perp.exchange/config.production.json")
.then((res) => res.json())
.then((out) => { console.log(out) })
.catch((err) => { throw err });