AWS API 请求标头中的Content-Type 为小写字母

问题描述 投票:0回答:3

我正在使用 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。不知道为什么。此行为在所有浏览器中都是一致的。

amazon-web-services api aws-lambda aws-api-gateway
3个回答
3
投票

我刚刚发现同样的问题。

使用 REST 私有 API:“内容类型” 使用 REST 公共 API:“内容类型”


0
投票

我偶然发现这个问题,我自己对标题名称的大小写有问题。我不知道是什么导致了两种环境之间的差异,但正如 SO 中其他地方所引用的,即: HTTP 标头是否区分大小写? HTTP 1.1 中的 HTTP 标头应该不区分大小写。

这意味着,如果您希望应用程序完全兼容 HTTP1.1,则无论标头的实际情况如何,它的行为都必须完全相同。

所以,从标准的角度来看,你的应用程序并不完全符合HTTP1.1。


0
投票

这与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 没有指定标头需要遵循任何大小写约定,因此我建议将它们全部转换为小写。

© www.soinside.com 2019 - 2024. All rights reserved.