원본 간 글꼴이 Cross-Origin Resource Sharing 정책에 의해로드되지 않도록 차단되었습니다


159

두 Chrome 브라우저에서 다음과 같은 오류가 발생하지만 전부는 아닙니다. 현재 문제가 무엇인지 확실하지 않습니다.

출처 ' https://ABCDEFG.cloudfront.net '의 글꼴 이 Cross-Origin 리소스 공유 정책에 의해로드되지 않도록 차단되었습니다. 요청 된 리소스에 'Access-Control-Allow-Origin'헤더가 없습니다. 따라서 원본 ' https://sub.domain.com '은 액세스 할 수 없습니다.

S3에 다음 CORS 구성이 있습니다

<CORSConfiguration>
 <CORSRule>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedHeader>*</AllowedHeader>
   <AllowedMethod>GET</AllowedMethod>
 </CORSRule>
</CORSConfiguration>

요청

Remote Address:1.2.3.4:443
Request URL:https://abcdefg.cloudfront.net/folder/path/icons-f10eba064933db447695cf85b06f7df3.woff
Request Method:GET
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:abcdefg.cloudfront.net
Origin:https://sub.domain.com
Pragma:no-cache
Referer:https://abcdefg.cloudfront.net/folder/path/icons-e283e9c896b17f5fb5717f7c9f6b05eb.css
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36

JS 파일을 포함하여 Cloudfront / S3의 다른 모든 요청은 올바르게 작동합니다.


5
같은 문제가 발생했습니다. 크롬 37.0.2062.94로 업그레이드 한 후 알아 채기 시작했습니다.
Kirley

CORS 구성을 업데이트 한 후 자산의 이름을 바꾸고 작동하도록 관리했습니다. 따라서 1) CORS 구성은 파일 생성에만 적용 (업데이트 아님)되거나 2) CORS 구성은 Cloudfront에 캐시됩니다. 다른 사람들이 그들에게도 효과가 있음을 확인할 수 있다면 이것을 답변으로 게시 할 것입니다.
Dallas Clark

1
Chrome v. 37.0.2062.94에서는 이전 버전이 아닌 것으로 나타났습니다. S3에서 CORS 구성이 전혀 없으므로 이것이 일어나지 않아야합니다.
Ghopper21

1
@ Ghopper21에는 올바른 CORS 구성이 필요합니다. 파이어 폭스에서 테스트하면 동일한 결과를 얻을 수 있습니다.
Tim Diggins

1
@RichPeck-올바른 CORS 구성을 S3에 추가하여 수정하십시오 (또는 소스에서 CDN을 자동으로 만드는 경우 약간 더 복잡합니다. 적절한 헤더를 추가 한 다음 캐시 된 글꼴을 무효화해야 함) ... stackoverflow.com / questions / 12229844 /… 자세한 내용은 아래 답변을 참조하십시오
Tim Diggins

답변:


87

이 규칙을 .htaccess에 추가하십시오.

Header add Access-Control-Allow-Origin "*" 

@david thomas가 제안한 것처럼 특정 도메인 값을 사용할 수 있습니다.

Header add Access-Control-Allow-Origin "your-domain.com"

1
안녕, 차이점은 Header set Access-Control-Allow-Origin "*"무엇입니까? 감사합니다
NineCattoRules

8
Windows 사용자의 경우 web.config 파일의 <customHeaders>에서 <add name = "Access-Control-Allow-Origin"value = "*"/>를 설정하십시오. 좋은 하루 되세요
Arsalan Saleem

2
@Simone의 차이점은 "add"를 사용하면이 헤더가 이미 존재하더라도 응답 헤더가 기존 헤더 세트에 추가된다는 것입니다. 이로 인해 동일한 이름을 가진 두 개 이상의 헤더가 생성 될 수 있습니다. "set"을 사용하면 응답 헤더가 설정되어 이전 헤더를이 이름으로 바꿉니다. 이 경우 같은 원인으로 * 모두 포함됩니다.
Giovanni Di Gregorio

@GiovanniDiGregorio 좋은 정보 주셔서 감사합니다!
NineCattoRules

21
Access-Control-Allow-Origin "*"도메인을 모든 도메인에서 자바 스크립트로 액세스 할 수있게되므로 주목할 수 없습니다. 대신 특정 도메인 값을 사용해야합니다 (예 : stackoverflow.com/a/10636765/583715Access-Control-Allow-Origin "http://example1.com" 참조) .
David Thomas

59

~ Sep / Oct 2014 이후의 Chrome은 Firefox에서 https://code.google.com/p/chromium/issues/detail?id=286681 과 동일한 CORS 검사를 적용합니다 . https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/blink-dev/TT9D5-Zfnzw 에 이에 대한 토론이 있습니다.

폰트에 대해 브라우저가 프리 플라이트 검사를 수행 할 수 있다고 가정하면 S3 정책 에는 cors 요청 헤더도 필요합니다. . Safari (현재 CORS에서 글꼴을 확인하지 않음)와 Firefox (그렇지 않음)에서 페이지를 확인 하여이 문제를 다시 확인할 수 있습니다.

Amazon S3 CORS 세부 정보 는 Amazon S3 CORS (Cross-Origin Resource Sharing)의 스택 오버 플로우 응답 및 Firefox 도메인 간 글꼴로드 를 참조하십시오.

일반적으로 NB는 Firefox에만 적용되므로 Chrome이 아닌 Firefox를 검색하는 데 도움이 될 수 있습니다.


이 답변에 감사드립니다. 많은 사람들에게 문제가 될 수 있습니다. Chrome의 안정적인 빌드에서 문제가 발생했지만
Dallas Clark

45
이것은 현재 Chrome에서 발생합니다.
justingordon

사람들 이이 대답에 대해 계속 언급하면서 (나는 자신을 포함하여!), 나는 그것을 덜 역사적이고 오늘날과 관련성이있게 만들었습니다.
Tim Diggins

1
또한 참고로 나는 오류 메시지가 "간 리소스 공유 정책에 의해 차단 되었기 때문에로드. : 없음 '액세스 제어 - - 원산지를 허용'헤더가 요청 된 자원에 존재 원산지는"것을 발견했다 실제로 나쁜을 갖는 할 원래 서버의 글꼴 파일 경로 및 클라우드 프론트가 서버의 홈페이지로 리디렉션됩니다 (리디렉션 응답 또는 홈페이지에 CORS 헤더가 없었습니다). 혼란 스럽지만 실제 글꼴 파일의 정확한 경로를 사용하여 해결했습니다 (CORS 문제는 아니며 엄격하게 말하면).
Tim Diggins

@DallasClark, 질문에 대한 답변을 선택하고 싶을 수도 있습니다. 고마워 팀, 당신의 링크와 설명은 내 경험에 도움이되었습니다. 건배.
Dan

46

<AllowedMethod>HEAD</AllowedMethod>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>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

보안에 대해 잘 모르겠지만 누군가가 그것에 대한 의견을 가지고 있다면 좋을 것입니다 ..
Özer S.

이 변경 사항을 전파하는 데 시간이 필요합니까? <AllowedMethod>HEAD</AllowedMethod>버킷에 대한 CORS 정책에 방금 추가 했는데 여전히 작동하지 않습니다.
Salvatore Iovene

일반적으로 아니오, 최대 값을 가져야합니다. 커플 분
Özer S.


12

2014 년 6 월 26 일 AWS는 CloudFront에서 적절한 Vary : Origin 동작을 발표했습니다.

S3 버킷에 대한 CORS 구성을 설정하십시오.

<AllowedOrigin>*</AllowedOrigin>

CloudFront-> 배포->이 오리진의 동작에서 전달 헤더 : 화이트리스트 옵션을 사용하고 'Origin'헤더를 화이트리스트에 추가하십시오.

CloudFront가 새 규칙을 전파하는 동안 ~ 20 분 동안 기다립니다.

이제 CloudFront 배포는 서로 다른 클라이언트 오리진 헤더에 대해 서로 다른 응답 (적절한 CORS 헤더 포함)을 캐시해야합니다.


1
작동하지 않는 것 같습니다. 자세한 내용이 있습니까? 나는 이것을 가능하게했지만 여전히 똑같은 문제가 발생합니다.
Jaco Pretorius

7

나를 위해 일한 유일한 것 (아마도 www. 사용법과 일치하지 않기 때문에) :

이것을 .htaccess 파일에 붙여 넣으십시오.

<IfModule mod_headers.c>
<FilesMatch "\.(eot|font.css|otf|ttc|ttf|woff)$">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
<IfModule mod_mime.c>
# Web fonts
AddType application/font-woff woff
AddType application/vnd.ms-fontobject eot

# Browsers usually ignore the font MIME types and sniff the content,
# however, Chrome shows a warning if other MIME types are used for the
# following fonts.
AddType application/x-font-ttf ttc ttf
AddType font/opentype otf

# Make SVGZ fonts work on iPad:
# https://twitter.com/FontSquirrel/status/14855840545
AddType     image/svg+xml svg svgz
AddEncoding gzip svgz

</IfModule>

# rewrite www.example.com → example.com

<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
</IfModule>

http://ce3wiki.theturninggate.net/doku.php?id=cross-domain_issues_broken_web_fonts


1
대박! 고마워요!
Rotimi

1
코드가 상세했기 때문에 코드를 처리하는 데 시간이 걸렸지 만 몇 가지 사항을 배웠습니다. 내 솔루션을 조정하기 위해 그 일부를 적용했습니다. 효과가있었습니다.
Mohammed Moinuddin Waseem

3

나는이 같은 문제가 있었고이 링크는 나에게 해결책을 제공했다.

http://www.holovaty.com/writing/cors-ie-cloudfront/

짧은 버전은 다음과 같습니다.

  1. S3 CORS 구성 편집 (내 코드 샘플이 제대로 표시되지 않음)
    참고 : 이것은 원래 질문에서 이미 수행되었습니다.
    참고 : 제공된 코드는 매우 안전하지 않으며 링크 된 페이지에서 자세한 정보를 제공합니다.
  2. 배포판의 "비헤이비어"탭으로 이동하여 클릭하여 편집하십시오.
  3. "앞으로 헤더"를 "없음 (캐싱 개선)"에서 "화이트리스트"로 변경하십시오.
  4. "화이트리스트 헤더"목록에 "원본"추가
  5. 변경 사항을 저장하십시오

클라우드 프론트 배포가 업데이트되며 약 10 분이 걸립니다. 그 후 CORS 관련 오류 메시지가 브라우저에서 사라 졌는지 확인하여 모든 것이 잘되어야합니다.


2

web.config 파일과 함께 Microsoft 제품을 사용하는 경우 :

이것을 web.config와 병합하십시오.

모든 도메인에 허용하려면 교체 value="domain"와 함께value="*"

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.webserver>
    <httpprotocol>
      <customheaders>
        <add name="Access-Control-Allow-Origin" value="domain" />
      </customheaders>
    </httpprotocol>
  </system.webserver>
</configuration>

web.config를 편집 할 권한이 없으면 서버 측 코드에이 줄을 추가하십시오.

Response.AppendHeader("Access-Control-Allow-Origin", "domain");

Windows 사용자를 기억하는 데 투표 할 자격이 있습니다.
mohrtan

asp.net 코어를 사용하고 있는데 이것을 appsettings.json 파일에 어떻게 추가합니까?
Yusuff Sodiq

1

여기에 좋은 글이 있습니다 .

nginx / apache에서 이것을 구성하는 것은 실수입니다.
호스팅 회사를 사용하는 경우 에지를 구성 할 수 없습니다.
Docker를 사용하는 경우 앱은 독립적이어야합니다.

일부 예제는 사용 connectHandlers하지만 문서에 헤더 만 설정합니다. 사용은 제공 rawConnectHandlers되는 모든 자산 (fonts / css / etc)에 적용됩니다.

  // HSTS only the document - don't function over http.  
  // Make sure you want this as it won't go away for 30 days.
  WebApp.connectHandlers.use(function(req, res, next) {
    res.setHeader('Strict-Transport-Security', 'max-age=2592000; includeSubDomains'); // 2592000s / 30 days
    next();
  });

  // CORS all assets served (fonts/etc)
  WebApp.rawConnectHandlers.use(function(req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    return next();
  });

프레이밍 등과 같은 브라우저 정책 을 살펴보기에 좋은시기입니다 .


0

node.js를 서버로 사용하는 경우 원점을 추가하십시오 ...

이처럼

  app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  next();
});

원점에 대한 응답이 필요합니다


-5

heroku에 대한 작업 솔루션은 http://kennethjiang.blogspot.com/2014/07/set-up-cors-in-cloudfront-for-custom.html입니다 (따옴표는 다음과 같습니다).

아래는 Heroku에서 Rails 앱을 실행하고 Cloudfront를 CDN으로 사용하는 경우 수행 할 수있는 작업입니다. Ruby 2.1 + Rails 4, Heroku Cedar 스택에서 테스트되었습니다.

글꼴 자산에 CORS HTTP 헤더 (Access-Control- *) 추가

  • font_assetsGemfile에 gem 을 추가하십시오 .
  • bundle install
  • 추가 config.font_assets.origin = '*'config/application.rb . 보다 세밀한 제어를 원하면 다른 환경에 다른 원점 값을 추가 할 수 있습니다 (예 :config/config/environments/production.rb
  • curl -I http://localhost:3000/assets/your-custom-font.ttf
  • 코드를 Heroku로 푸시하십시오.

CORS HTTP 헤더를 전달하도록 Cloudfront 구성

Cloudfront의 배포판을 선택하고 "동작"탭에서 글꼴 전송을 제어하는 ​​항목을 선택하고 편집하십시오 (대부분의 간단한 Rails 앱의 경우 여기에 1 개의 항목 만 있음). 정방향 헤더 를 "없음"에서 "필자"로 변경하십시오 . 허용 목록에 다음 헤더를 추가하십시오.

Access-Control-Allow-Origin
Access-Control-Allow-Methods
Access-Control-Allow-Headers
Access-Control-Max-Age

저장하면 끝입니다!

주의 사항 : CORS 오류가 없어도 Firefox에서 글꼴을 새로 고치지 않는 경우가 있습니다. 이 경우 Firefox가 실제로 결정되었다고 확신하도록 페이지를 몇 번 새로 고침하십시오.


4
링크 전용 답변을 피하십시오. 링크 된 기사에서 관련 스 니펫을 답변으로 복사 할 수 있으면 도움이됩니다. 감사.
bPratik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.