Имам приложение, което иска да зарежда и манипулира изображения. Браузърът изисква изображението да е или от същия произход като приложението, или отговорът на изображението да позволява достъп от различни източници. Изображенията ми се обслужват чрез CDN (AWS S3) и са конфигурирани да предоставят правилните заглавки на отговор Access-Control-Allow-Origin
, когато бъдат поискани с очакваната заглавка Origin
:
GET /image.png HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, compress
Host: <aws host url here>
Origin: localhost:5000
HTTP/1.1 200 OK
Accept-Ranges: bytes
Access-Control-Allow-Methods: GET, HEAD
Access-Control-Allow-Origin: *
Cache-Control: max-age=315360000, no-transform, public
Content-Length: 3333
Content-Type: image/png
Server: AmazonS3
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
Това ще работи добре, освен че приложението ми има и допълнителното изискване да може да работи офлайн. За да постигна това, изброявам моите URL адреси на CDN активи в моя кеш манифест на приложение:
CACHE MANIFEST
CACHE:
http://<host url here>/image.png
Проблемът, който имам е, че след като активите се заредят от кеша на приложенията, започвам да получавам Cross-origin image load denied by Cross-Origin Resource Sharing policy
грешки.
Прочетох, че Chrome трябва да изпраща произхода на манифеста на appcache заедно със заявките за попълване на кеша, но въз основа на моите бегли изследвания в chrome://net-internals
, това не изглежда да се случва в моя случай.
Ето какво виждам в chrome://net-internals/#events
, когато се направи заявка за попълване на кеша:
HTTP_TRANSACTION_SEND_REQUEST_HEADERS
--> GET /image.png HTTP/1.1
Host: <aws host url here>
Connection: keep-alive
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
HTTP_TRANSACTION_READ_RESPONSE_HEADERS
--> HTTP/1.1 200 OK
Cache-Control: max-age=315360000, no-transform, public
Accept-Ranges: bytes
Content-Type: image/png
Content-Length: 3333
Server: AmazonS3
Изглежда, че Chrome не прави заявката с Origin
заглавка, което означава, че CDN не знае да отговори с CORS заглавките. В резултат на това (мисля), Chrome кешира отговора за достъп без кръстосано начало и го обслужва от кеша на приложенията.
Всеки съвет или прозрение ще бъде много добре дошъл! Благодаря за четенето.