AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1073320
Accepted
UncleBob
UncleBob
Asked: 2021-08-03 07:34:25 +0800 CST2021-08-03 07:34:25 +0800 CST 2021-08-03 07:34:25 +0800 CST

AWS Cloudfront CORS 字体文件问题

  • 772

我有一个从 CloudFront 端点传送到浏览器的 Javascript 应用程序。应用程序的所有静态文件都托管在 S3 存储桶中。这涉及一大堆 javascript 和 css 文件,以及一些字体文件。

加载整个应用程序的 html 是由服务器生成和交付的,我们称该服务器为“https://my.domain.com”。

如前所述,这只是 html 文件。然后从指向存储桶作为其来源的云端端点下载所有静态内容。我们将这些称为 xxxx.cloudfront.net 和存储桶 my-bucket。

据我了解,几乎所有从生成的 html 到云端端点的请求都是 CORS 请求,因为 html 的来源是 my.domain.com,并且所有请求的文件显然都没有托管在该域上。

所以很自然,我去设置所有 CORS 的东西。首先,bucket 是完全公开的,它具有以下 CORS 策略:

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*",
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]

这似乎对一切都有效……除了字体文件!我可能应该提到存储桶的文件夹结构。它有三个文件夹,生产、开发和通用。这些内容应该是不言自明的。Common 包含字体,以及一些 3rd 方 javascript 库。生产和开发包含各自环境的 js 和 css。

无论如何,除了字体文件之外,所有内容都会加载,我收到以下错误:

Access to font at 'https://xxxx.cloudfront.net/common/fonts/outline/budicon-classic.ttf?jdete2' from origin 'https://my.domain.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

让我感到非常奇怪的是,只有字体文件会有这个问题。公共文件夹中的其他文件似乎加载得很好,如果我只是将https://xxxx.cloudfront.net/common/fonts/outline/budicon-classic.ttf?jdete2粘贴到我的浏览器中,它可以工作。

唯一的区别似乎是这些文件不是从 html 加载的,而是通过 @font-face thingy 从 css 加载的。查看加载应用程序时浏览器生成的请求,我可以清楚地看到例如设置了 origin 标头,而不是用于请求 js 或 css 文件。Set-Fetch-Mode 设置为“cors”,而对于其他文件,它设置为“no-cors”。

无论如何,我试图在云端解决这个问题。首先,我在原始配置中添加了标题“Access-Control-Allow-Origin: *”。然后我为源添加了一个行为配置,以允许路径模式 *.

现在......好吧,现在我仍然有同样的问题,并且完全没有想法,虽然想知道为什么@font-face创建的请求与对javascript和css资源的请求相比形成如此不同,但是最重要的是,我到底能做些什么来加载他们血腥的字体?

amazon-s3 amazon-cloudfront css cors
  • 1 1 个回答
  • 909 Views

1 个回答

  • Voted
  1. Best Answer
    UncleBob
    2021-08-04T01:05:16+08:002021-08-04T01:05:16+08:00

    好的,这很烦人,但我想是合乎逻辑的。

    我在上面发布的修复确实有效,但配置更改不会使云端缓存失效。由于 CORS 错误是由浏览器生成的,因此 cloudfront 确实缓存了该响应、标头和所有内容,因为它看不到任何问题。

    长话短说:配置更改后无效的云端缓存,现在它可以工作了。啊!

    • 0

相关问题

  • 如何将 Symantec Backup Exec 与 S3 Amazon 存储结合使用?

  • Amazon S3 是否对您的数据做出任何形式的保证?

  • Amazon S3 存储如何计费?[关闭]

  • 使用亚马逊 S3 时的注意事项

  • 用于备份等的 S3 接口 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve