【发布时间】:2018-04-16 02:17:27
【问题描述】:
我在暂存服务器上有一个 Rails 应用程序,它使用 Cloudfront 作为 S3 存储桶中图像的 CDN。存储桶中的图像都是 jpeg(未压缩)。如果我直接从存储桶加载图像,我可以在其响应标头中看到内容类型设置为image/svg+xml。
Cloudfront 发行版具有单一行为,并且压缩已关闭:
自动压缩对象:未选中
但是在网站上加载图片时存在问题。
如果请求的图像小于 1mb,则请求成功,带有响应标头(相关标头以粗体显示):
accept-ranges:bytes
age:12058
cache-control:max-age=29030400
content-length:22749
content-type:image/jpeg
date:Fri, 03 Nov 2017 07:35:39 GMT
etag:"5391a06cfff89879e57da305a21e3e4c"
last-modified:Tue, 29 Nov 2016 11:14:53 GMT
server:AmazonS3
status:200
via:1.1 1b61c3f085e80ef7e1cd6e9ac0cdfa77.cloudfront.net (CloudFront)
x-amz-cf-id:1-YfXx6B_px2YlEK7b96chYcC2AfZ_QMd42NpcilQcXhr63gpJ4_uQ==
x-cache:Hit from cloudfront
但是,如果请求的图像大于 1mb,则请求成功,但图像不会显示。标头显示响应编码为gzip。
age:12712
**content-encoding:gzip**
**content-type:text/html; charset=utf-8**
date:Fri, 03 Nov 2017 07:12:08 GMT
server:Cowboy
status:200 OK
status:200
vary:Accept-Encoding
via:1.1 vegur, 1.1 adc13b6ff82fd04caa2efba65479257c.cloudfront.net (CloudFront)
x-amz-cf-id:_CLNU7iKqnFF1kTNFRJVfrv4iTh8nzol1smRg73p8zESaZo96NZ2gA==
x-cache:Hit from cloudfront
x-content-type-options:nosniff
x-frame-options:SAMEORIGIN
x-request-id:eac71856-51b8-4b11-80eb-95e2b4c5bb37
x-runtime:0.022798
x-xss-protection:1; mode=block
为什么 Cloudfront 对图像进行 gzip 压缩,为什么 gzip 压缩的图像无法呈现到屏幕上?据我了解,压缩图像没有意义,但它们仍然应该被渲染。
【问题讨论】:
-
您的示例显示了两个完全不同的源服务器,S3 与 Cowboy。
-
@Michael-sqlbot 我认为这是云端幕后的东西。我只设置了一个起源,所以不知道牛仔是什么。会不会是边缘服务器?
-
不,不是。 Cowboy 是 AWS 不使用的 Web 服务器,
Via: vegur表明此响应实际上可能来自您使用 Heroku 所做的事情。 superuser.com/a/857239/183147
标签: image amazon-s3 gzip amazon-cloudfront response-headers