2014-08-27 1 views
3

static.example.com과 같은 하위 도메인에 내 글꼴이 있습니다. 오늘은 글꼴 및 Firefox와이 오류가 표시됩니다 dev 도구에서 나타났습니다 :CORS 문제 요청한 리소스에 'Access-Control-Allow-Origin'헤더가 없습니다.

«출처 'http://static.example.com'의 글꼴이 교차 출하 자원 공유 정책에 의해로드되지 못했습니다. 요청한 리소스에 'Access-Control-Allow-Origin'헤더가 없습니다. 원산지 'http://example.com는'그러므로 허용되지 않는 액세스 내가 터미널에서 curl -I http://static.example.com/fonts/pfcentrosanspro-reg-webfont.eot을 시도하는 경우»는 이미 하위 도메인 .htaccess 파일 또한

<IfModule mod_headers.c> 
    <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$"> 
    Header set Access-Control-Allow-Origin "*" 
    Header set Access-Control-Allow-Headers "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With" 
    Header set Access-Control-Allow-Methods "GET, PUT, POST" 
    </FilesMatch> 
</IfModule> 

에서이 코드를

내가이 응답을 얻을

:.

HTTP/1.1 200 OK 
Server: nginx 
Date: Wed, 27 Aug 2014 17:20:50 GMT 
Content-Type: font/eot 
Content-Length: 26403 
Connection: keep-alive 
X-Accel-Version: 0.01 
Last-Modified: Mon, 05 Aug 2013 17:49:42 GMT 
Accept-Ranges: bytes 
Cache-Control: max-age=31536000 
Expires: Thu, 27 Aug 2015 17:20:50 GMT 
X-Powered-By: PleskLin 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Headers: Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With 
Access-Control-Allow-Methods: GET, PUT, POST 

하지만 오류가 계속 발생하면이 코드로 Amazon S3 CDN의 버킷으로 글꼴을 옮겼습니다 :

<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
    <AllowedOrigin>http://example.com</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <AllowedMethod>HEAD</AllowedMethod> 
    <AllowedMethod>DELETE</AllowedMethod> 
    <AllowedMethod>PUT</AllowedMethod> 
    <AllowedMethod>POST</AllowedMethod> 
    </CORSRule> 
</CORSConfiguration> 

운이 없다. 오류가 여전히 존재한다. 글꼴은로드되지 않고 CORS 오류가 표시된다. 결과가없는 Nginx 설정 파일도 수정했다.

내가 잘못 했나요? 이건 내 견과를 몰고있어.

이 사이트는

여러분의 도움에 감사드립니다 W3 총 캐시 플러그인 워드 프레스 블로그입니다!

+0

확실히 캐싱 문제가있는 것 같습니다. cURL 헤더가 올바르므로 브라우저 요청에서도 정확해야합니다. Chrome/Firefox에서 브라우저 캐시를 사용 중지 했습니까? Chrome 개발자 도구 설정에서이 작업을 수행 할 수 있습니다. – rauberdaniel

+0

해결책을 찾았습니까? –

답변

0

일부 브라우저는이를 좋아하지 않는다 :

Access-Control-Allow-Origin * 

당신은 원래 요청의 도메인으로 설정해야합니다. 나는 비슷한 문제들로 많은 어려움을 겪었으며 마침내 아래의 솔루션에 착수했습니다 (PHP,하지만 당신은 그 아이디어를 얻을 것입니다).

$origin=isset($_SERVER['HTTP_ORIGIN'])?$_SERVER['HTTP_ORIGIN']:$_SERVER['HTTP_HOST']; 
header('Access-Control-Allow-Origin: '.$origin);   
header('Access-Control-Allow-Methods: POST, OPTIONS, GET, PUT'); 
header('Access-Control-Allow-Credentials: true'); 
header('Access-Control-Allow-Headers: Authorization, X-Requested-With'); 
header('P3P: CP="NON DSP LAW CUR ADM DEV TAI PSA PSD HIS OUR DEL IND UNI PUR COM NAV INT DEM CNT STA POL HEA PRE LOC IVD SAM IVA OTC"'); 
header('Access-Control-Max-Age: 1'); 

이 코드는 모든 도메인의 모든 요청을 수락합니다. 이것은 안전하지 않을 수 있습니다. 허용 된 도메인의 화이트리스트에 대한 요청을 확인하고 싶을 것입니다.

관련 문제