使用单个 case-sensitive 响应 header 在 AWS 中托管静态网页的最简单方法

Simplest way to host a static webpage in AWS with a single case-sensitive response header

我正在尝试从某些嵌入式设备为 ConnMan connectivity check 创建一个简单的网页。这个图书馆对某些事情非常挑剔。

body 必须是:<html>\n<head>\n</head>\n<body>\n</body>\n</html>\n 如果有的话,即使末尾的尾随换行符丢失,它也会失败。

另一个组件是对 X-ConnMan-Status: online 的响应 header。通常响应 headers 是不区分大小写的,但是如果完全改变大小写,ConnMan 就会失败。这是一个看似不重要的细节,直到您尝试使用 AWS 托管它。

我首先想到的是 CloudFront (CDN),因为它是静态内容。我也想找到一个无服务器解决方案,因为我不想管理 EC2 实例或 K8s pods。我设置了一个带有 S3 存储桶的 CloudFront 分配作为后端来托管简单的 HTML 响应。这很好用。

然后我开始探索添加响应的各种方法 header。到目前为止我已经尝试过:

添加响应 header 的所有工作,但亚马逊对将 header 名称转换为小写有一些疯狂的痴迷,我需要它是 X-ConnMan-Status 而不是 [=15] =].有没有一种简单的方法可以在 AWS 中托管它,它不会小写响应 header 名称?

我终于意识到 header 名字的小写是由于 HTTP/2: https://httpwg.org/specs/rfc7540.html#HttpHeaders

header field names MUST be converted to lowercase prior to their encoding in HTTP/2. A request or response containing uppercase header field names MUST be treated as malformed

禁用 HTTP/2 对 CloudFront 分发的支持,或向客户端请求 HTTP/1.1,保留 header 大小写。