我有一个使用Cloudfront作为资产宿主的Rails应用程序。一切都很好,除非涉及字体。为了使浏览器从Cloudfront中提取缓存的字体,我使用了font_assets gem。不幸的是,这并不是我希望的那样。

在config / environments / production.rb中,我有这个

config.font_assets.origin = 'https://www.MyURL.com'


我也将force_ssl设置为true。

当我卷曲一种字体时,这就是我看到的。

$ curl -i https://**<mycloudfront domain name>**/assets/opensans-regular-webfont-debcfe09b9fe1d259815c339e9ef4a9f.woff
HTTP/1.1 401 Unauthorized
Content-Type: application/font-woff
Content-Length: 0
Connection: keep-alive
Server: Cowboy
Strict-Transport-Security: max-age=31536000
WWW-Authenticate: Basic realm=""
Cache-Control: no-cache
X-Request-Id: f1215a95-603c-4b8a-acc9-077a292ee538
X-Runtime: 0.006937
Access-Control-Allow-Origin: https://<**Origin Domain Name**>
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: x-requested-with
Access-Control-Max-Age: 3628800
Date: Mon, 23 Nov 2015 05:23:18 GMT
X-Rack-Cache: miss
Via: 1.1 vegur, 1.1 87a5dc4906ffb6323c3ec65df37e46f1.cloudfront.net (CloudFront)
Vary: Accept-Encoding
X-Cache: Error from cloudfront
X-Amz-Cf-Id: 8EQxf_pJ-fAiEis8ztx9icjRbFy5CWPn_ccOFO-WjzgICN-_NSOing==


鉴于起源域在cloudfront起源中列出,我对为什么要获得401感到困惑。

知道我在做什么错吗?

最佳答案

您的网站是否同时使用http和HTTPS?在这种情况下,CDN将缓存第一个请求及其方案。如果第一个请求是通过http发送的,则即使配置位于Cor中,所有HTTPS都将被忽略。我建议选择一个并使CDN缓存无效,然后看看情况如何。

如果您在cloudfront中将行为设置为转发原始标头,则cloudfront将为http和HTTPS缓存不同的副本,因此适用于两种方案。但这表现较差。

07-24 09:45
查看更多