我正在使用 AWS Cloudfront 和 API 网关作为文件上传 API。我已将相同的代码部署到两个不同但相同的环境。这两个环境都是由相同的 cloudformation 脚本构建的。 我们遇到了一个奇怪的问题
当我们在环境 A 中上传文件时,我们收到以下请求
"headers": {
"content-type": "multipart/form-data; boundary=----WebKitFormBoundarygPe3hR4e1dTzLdBt",
但是在环境 B 中我正在关注
"headers": {
"Content-Type": "multipart/form-data; boundary=----WebKitFormBoundarygPe3hR4e1dTzLdBt",
区别在于Content-Type。在环境 A 中,我得到小写的 Content-Type。不知道为什么。此行为在所有浏览器中都是一致的。
我刚刚发现同样的问题。
使用 REST 私有 API:“内容类型” 使用 REST 公共 API:“内容类型”
我偶然发现这个问题,我自己对标题名称的大小写有问题。我不知道是什么导致了两种环境之间的差异,但正如 SO 中其他地方所引用的,即: HTTP 标头是否区分大小写? HTTP 1.1 中的 HTTP 标头应该不区分大小写。
这意味着,如果您希望应用程序完全兼容 HTTP1.1,则无论标头的实际情况如何,它的行为都必须完全相同。
所以,从标准的角度来看,你的应用程序并不完全符合HTTP1.1。
这与API网关中配置的API端点类型有关。边缘优化的 API 端点将标头大写。该文档(https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-endpoint-types.html)给出了解释:
边缘优化的 API 将 HTTP 标头的名称大写(例如 Cookie)。
仅当您还使用自定义域名时才可以使用边缘优化端点,因此默认端点 (
https://XXXXXXXXXX.execute-api.REGION.amazonaws.com
) 的行为可能有所不同。
最好更新您的后端实现以考虑不同的标头。 HTTP 没有指定标头需要遵循任何大小写约定,因此我建议将它们全部转换为小写。