Краткое описание проблемы
У меня есть приложение JS / PIXI, которое подается из (1) источника и загружает изображения через CORS из (2) S3. Недавно я изменил настройку Origin на NGINX, и теперь у меня возникают проблемы с CORS, которые я не могу объяснить.
Я настроил CF + S3 для CORS, и заголовки corect достигают моего JS приложение. Однако, я все еще получаю ошибки в моей новой установке, но не в моей старой установке. Единственная разница между ними заключается в том, что исходное приложение JS передает NGINX вместо API Gateway, но я не понимаю, почему это должно иметь значение.
Новая настройка
- Origin
- JS Приложение -> AWS Cloudfront -> NGINX (обратный прокси-сервер) -> Tomcat
- Код JS попытается загрузить изображение из S3
- Пример: https://clawcrane-staging.myshopify.com/ (проверьте вашу консоль разработчика)
- CF + S3 (CORS)
Старая настройка
- Origin
- JS Приложение -> AWS Cloudfront -> AWS API-шлюз -> Tomcat
- Пример: https://fabios-colors.com/ (здесь вы сначала нужно щелкнуть поле в правом верхнем углу и go через чат)
- CF + S3 (CORS)
Детали проблемы
* 1 064 * Когда я проверяю консоль разработчика для новой настройки, заголовки CORS отправляются из CF + S3 в браузер. Тем не менее я получаю ошибки CORS с новой настройкой, но нет ошибок со старой установкой.
Заголовки ответа НОВАЯ настройка (ошибки)
accept-ranges: bytes
access-control-allow-methods: GET, HEAD
access-control-allow-origin: *
content-length: 2737
content-type: image/png
date: Fri, 07 Feb 2020 06:54:14 GMT
etag: "f17401d09e8e68fdd5e1e4f5f2d6c078"
last-modified: Mon, 03 Feb 2020 06:44:03 GMT
server: AmazonS3
status: 200
vary: Origin,Access-Control-Request-Headers,Access-Control-Request-Method
via: 1.1 50f438df6dbb947f3e4702890bc9cc06.cloudfront.net (CloudFront)
x-amz-cf-id: wDaNwtpDRoiFKGaxQ5HgJLPIAiDiCR24O5HNJQ7imwl-BNU9SvyF3g==
x-amz-cf-pop: DUS51-C1
x-cache: RefreshHit from cloudfront
Ошибки, которые я получаю
HTTP-запрос возвращается с 200 ок. Я получаю сообщение об ошибке:
GLTexture.js:94 Uncaught DOMException: Failed to execute 'texImage2D' on 'WebGLRenderingContext': The image element contains cross-origin data, and may not be loaded.
at n.upload (https://pixijs.download/v4.8.5/pixi.min.js:8:23427)
at t.updateTexture (https://pixijs.download/v4.8.5/pixi.min.js:13:9592)
at e.bindTexture (https://pixijs.download/v4.8.5/pixi.min.js:13:17291)
at e.flush (https://pixijs.download/v4.8.5/pixi.min.js:15:4210)
at e.stop (https://pixijs.download/v4.8.5/pixi.min.js:15:4619)
at e.setObjectRenderer (https://pixijs.download/v4.8.5/pixi.min.js:13:15173)
at e._renderWebGL (https://pixijs.download/v4.8.5/pixi.min.js:11:14045)
at e.renderWebGL (https://pixijs.download/v4.8.5/pixi.min.js:10:23992)
at e.renderWebGL (https://pixijs.download/v4.8.5/pixi.min.js:10:24068)
at e.render (https://pixijs.download/v4.8.5/pixi.min.js:13:14986)
Настройка заголовков ответов OLD (без ошибок)
accept-ranges: bytes
access-control-allow-methods: GET, HEAD
access-control-allow-origin: *
age: 2365
content-length: 116268
content-type: image/png
date: Fri, 07 Feb 2020 06:58:37 GMT
etag: "71858c64f78ce419cdcd4d8f21839332"
last-modified: Wed, 05 Feb 2020 11:28:15 GMT
server: AmazonS3
status: 200
vary: Access-Control-Request-Headers,Access-Control-Request-Method
via: 1.1 e5dcf90f3787d486ad40e46070021460.cloudfront.net (CloudFront)
x-amz-cf-id: 2LZVSXwwTWkcJ1LShQqfp2ZB4jPMe4Olp7CjOHO6gsGlsUCBxrvlNQ==
x-amz-cf-pop: DUS51-C1
x-cache: Hit from cloudfront
Настройка S3 CORS
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Настройка Cloudfront CORS
У меня есть белые списки Access-Control-Request-Headers
и Access-Control-Request-Method
.