【问题标题】:Custom headers on Amazon S3Amazon S3 上的自定义标头
【发布时间】:2021-11-17 15:42:24
【问题描述】:

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

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

我发现使用x-amz-meta-(something) 可以做到这一点,但是如果没有amz,像x-(something)-(something) 这样更一般的东西呢?

【问题讨论】:

  • 以这种方式前缀的标题有什么不能完成的?

标签: amazon-web-services amazon-s3 http-headers


【解决方案1】:

这篇漂亮的文章解释了一切 https://medium.com/@tom.cook/edge-lambda-cloudfront-custom-headers-3d134a2c18a2

tldr:

您不能只使用 S3。您需要通过 Lambda@Edge 使用 CloudFront 和 Lambda。它是 Lambda 和 CloudFront 之间的集成。它允许您在 CloudFront 中运行 Lambda。这允许您更改标题等。因此,如果您可以通过 CloudFront 访问您的 S3,那么这可能是一个可行的选择。

【讨论】:

【解决方案2】:

我认为他们的current API 不可能。它们涵盖了缓存和浏览器互操作性所需的主要标头。

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

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

【讨论】:

  • “微不足道”,如果您控制客户端应用程序...但如果是第三方,则不是那么微不足道!
  • @Jeff 我想如果你不直接访问 AWS,你就会受到所使用的任何东西的限制。
  • 谢谢,我想知道为什么我不能自己设置自定义标题。 x-amz-meta-prefix 确实做到了(亚马逊没有记录这一事实)。
  • 我正在使用他们的静态网站托管解决方案,我想设置 X-Frame-Options。但现在不行,我需要考虑其他的解决方案
【解决方案3】:

我能够使用s3cmd tool 实现这一目标。我编写了一个同步脚本,使用 AWS 客户端工具上的 --cache-control 参数同步我的静态站点,然后手动重置它并为一些特定文件添加几个其他标题:

cd /适当的目录

# 删除当前站点
aws s3 rm s3://yourbucket --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 文件方面有些笨拙。我把它作为一个实用的同步脚本的有用示例留下了。
  • 不幸的是,仅支持一组受限的标头。虽然支持标准缓存控制相关的标头。 docs.aws.amazon.com/AmazonS3/latest/API/…
【解决方案4】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 2021-08-25
  • 2014-03-06
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多