对云存储使用不同的内容编码

时间:2019-03-29 20:30:55

标签: google-cloud-storage

我希望能够为由Google Cloud Storage托管的静态资产支持Brotli和Gzip编码。为此,我想先对文件进行编码,然后再将其上传为<filename><filename>.gz<filename>.br。问题是,我找不到将Accept-Encoding的请求重定向到正确文件的方法。

我已经研究过使用:

  • Cloud Functions以某种方式重定向传入的请求(类似于AWS Cloudfront Lambda),但似乎不受支持
  • 负载均衡器将请求重定向到不同的存储桶,但据我所知,它只能基于主机名/路径重定向到不同的存储桶
  • Cloud CDN,但似乎没有任何功能对此有所帮助

请求/响应示例

假设存储桶example-bucket包含以下文件:

library.js
library.js.gz
library.js.br
例子1
GET http://storage.googleapis.com/example-bucket/library.js

Accept-Encoding: gzip, deflate, br
Content-Encoding: br

<Contents of http://storage.googleapis.com/example-bucket/library.js.br>
例子2
GET http://storage.googleapis.com/example-bucket/library.js

Accept-Encoding: gzip, deflate
Content-Encoding: gzip

<Contents of http://storage.googleapis.com/example-bucket/library.js.gz>

有没有一种方法可以简单,高效且具有成本效益地完成上述任务?我意识到可以通过App Engine托管我自己的服务器,并让它负责将请求路由到存储桶,但这是唯一的方法吗?

1 个答案:

答案 0 :(得分:0)

Lambda @ edge是一种实现方法,但是简单的方法是将CloudFront上的Accept-encoding标头列入白名单,以便CloudFront可以将其传递给Origin,您可以在Origin上进行配置以基于Accept-encoding来提供文件标头。

如果您打算使用Lambda @ edge,我建议您使用Origin请求功能。 1.将Accept-encoding标头列入白名单 2.Origin request函数读取报头值并更改请求URI路径。