4

이미지를로드하고 조작하려는 앱이 있습니다. 브라우저는 이미지가 앱과 동일한 출처이거나 이미지 응답이 원점 간 액세스를 허용해야합니다. 내 이미지는 CDN (AWS S3)를 통해 제공하고 있으며, 그들은 예상 Origin 헤더의 요청이있을 때 적절한 Access-Control-Allow-Origin 응답 헤더를 제공하도록 구성되어 있습니다Chrome 애플리케이션 캐시는 도메인 간 애셋 캐싱시 '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 

이 또한 추가 요구 사항이 내 응용 프로그램을 제외하고 잘 작동 것 오프라인에서 실행할 수 있음을 나타냅니다. 이를 위해, 나는 내 응용 프로그램 캐시 매니페스트에 내 CDN 자산 URL을 표시 해요 : 나는 데 문제는 자산이 앱 캐시에서로드되면, 내가 Cross-origin image load denied by Cross-Origin Resource Sharing policy 오류를 받기 시작한다는 것입니다

CACHE MANIFEST 

CACHE: 
http://<host url here>/image.png 

.

캐시 채우기 요청과 함께 Chrome is supposed to send the appcache manifest origin을 읽었지 만, 내 경우에 chrome://net-internals이라는 내 대담한 탐색을 기반으로하면 내 경우에는 그렇지 않습니다.

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 

크롬은 CDN가 모르는 의미 Origin 헤더와 함께 요청을하지 않는 것 같습니다 : 여기

무엇 캐시 인구 요청이 때 나는 chrome://net-internals/#events에서보고 있어요입니다 CORS 헤더로 응답하십시오. 결과적으로 Chrome은 바닐라 비 크로스 원점 액세스 응답을 캐싱하고 appcache에서 응답합니다.

모든 조언이나 통찰력을 환영합니다! 읽어 주셔서 감사합니다.

답변

3

답이 없습니다. 링크 된 버그가 해결되지 않았습니다. 프로젝트 멤버의 조치없이 몇 년이 지난 후에 보관됩니다. 크로스 원본 응용 프로그램 캐시 요청에는 원본 헤더가 포함되지 않습니다.

crbug.com에서 새로운 문제를 만들 수 있으며 더 많은 관심을 보일 수 있습니다. 그러나 thread (두 번째 호환성 위험 단락 참조)을 오해하지 않으면 응용 프로그램 캐시 매니페스트 내에서 크로스 원본 하위 리소스를 지원하는 유일한 브라우저 인 Chrome (및 아마도 Safari)을 읽었다 고 생각합니다. 응용 프로그램 캐시 사양에 요청을 추가하면 모든 브라우저 (공감대와 지원이 있다고 가정 함)가 향후이를 지원할 수 있습니다. 표준이 아닌 방식으로 비표준 동작을 향상시키는 것은 아마도 방법이 아니므로 사양 업데이트없이 요청을 구현하는 Chrome에는 포함되지 않을 것입니다. Application Cache는 꽤 부정적인 평판을 얻었으며 Google과 Mozilla가 지금 추진하고있는 방식은 Service Worker입니다 (Chrome 40 및 Opera 24에서 구현되고 Firefox에서 적극적으로 개발 중임).

+0

응답 해 주셔서 감사합니다. 나는 그 대답이 '무응답'이 될 것 같았습니다. 제안했던대로 티켓을 개설했습니다. https://code.google.com/p/chromium/issues/detail?id=358744&thanks=358744&ts=1396376673 – lettertwo

관련 문제