Amazon S3上的自定义标头

29

在亚马逊S3上,是否可以使用任意命名的自定义标头?

例如,我正在使用指向亚马逊S3作为源服务器的CDN,并且为了在CDN上启用高级功能,我需要使用一个自定义标头x-something-something...

我看到可以使用x-amz-meta-(something)来实现此目的,但是对于没有amzx-(something)-(something)这样的通用名称怎么办?

Amazon S3 custom headers


用那种方式前缀的头文件,你无法完成什么任务? - Kekoa
4个回答

19

这篇精美的文章详细解释了一切:如何使用Lambda@Edge在CloudFront/S3上提供自定义头部

tldr:

你不能只用S3来做到这一点。你需要通过Lambda@Edge使用CloudFront和Lambda进行整合。它是Lambda和CloudFront之间的集成。它允许你在CloudFront内运行Lambda,这样就可以更改标题等内容。因此,如果你可以通过CloudFront访问你的S3,则这可能是一个可行的选项。


请参考以下链接:https://dev59.com/ILzpa4cB1Zd3GeqPMIK3 - Yves M.
2
现在我们可以使用响应头策略来实现这一点,请参见 https://dev59.com/ILzpa4cB1Zd3GeqPMIK3#69985208 - Sarath

15

我认为使用他们目前的API是不可能的。该API覆盖了你需要进行缓存和浏览器互操作所需的主要头信息。

我认为他们只允许以x-amz-meta-为前缀的自定义标头,可能是为了避免在将来更新其API时与用户选择的标头发生冲突而保持安全。

如果您需要将自定义属性附加到对象上,则在客户端应用程序中解析出x-amz-meta-应该很容易。


13
如果你控制客户端应用程序,这个问题就是“琐碎的”...但如果它是第三方应用程序,那么问题就不那么琐碎了! - Jeff
1
@Jeff 我想,如果你不直接访问AWS,那么你就会受制于你正在使用的任何限制。 - Kekoa
谢谢,我一直在想为什么我不能设置自定义标头。确实是x-amz-meta-前缀解决了这个问题(这是亚马逊文档中记录不够清晰的事实)。 - Frederic
2
我正在使用他们的静态网站托管解决方案,我想设置X-Frame-Options。但现在我无法这样做,我需要考虑其他解决方案。 - aWebDeveloper

3

0
我使用s3cmd工具成功完成了这个任务。我编写了一个同步脚本,该脚本使用AWS客户端工具上的--cache-control参数来同步我的静态网站,然后手动重置并为一些特定文件添加其他几个标头:

cd /合适的目录

# 删除当前网站 aws s3 rm s3://你的bucket --recursive --exclude 'logs/*'

# 上传新网站,为所有文件设置缓存头为1个月 aws s3同步。 s3://yourbucket --exclude '.idea/*' --exclude '.git/*' --exclude '.gitignore' --cache-control max-age=2592000

# 重写某些文件的缓存头 python /pathToS3cmd/s3cmd modify --add-header="Cache-Control:no-cache,no-store,must-revalidate" s3://yourbucket/somefile.html python /pathToS3cmd/s3cmd/s3cmd modify --add-header="Expires:0" s3://yourbucket/somefile.html python /pathToS3cmd/s3cmd/s3cmd modify --add-header="Pragma:no-cache" s3://yourbucket/somefile.html


这段代码中包含了一些无用的内容,比如忽略日志、IntelliJ和Git文件。我将其保留下来,希望能作为一个实用同步脚本的有益示例。 - Mike Wilklow
1
很遗憾,仅支持一组受限制的标头。但是,支持标准缓存控制相关标头。https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html#RESTObjectPUT-requests - Konstantin Pelepelin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接