You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS API Gateway无Content-Type头时返回Unsupported media type问题求助

问题分析与解决方案

我之前也碰到过一模一样的问题,先给你拆解下核心原因,再一步步说解决办法:

为什么GUI测试正常,外部调用报错?

API Gateway的内置测试控制台其实会自动帮你填充默认请求头,包括Content-Type: application/json,所以你手动不传的时候,控制台偷偷给加上了,自然能正常工作。但Postman、CURL这类外部工具不会做这个自动填充,当请求里没有Content-Type头时,API Gateway会默认把请求识别为application/octet-stream(二进制流类型),而你的集成请求只配置了application/json的处理规则,所以就触发了「unsupported media type」错误。

解决方案

方案1:添加application/octet-stream的映射模板

这是最直接的解决方式,让API Gateway能处理无Content-Type的请求:

  • 打开API Gateway控制台,找到你的目标API和对应的方法
  • 进入「Integration Request」,拉到「Mapping Templates」部分
  • 点击「Add mapping template」,输入application/octet-stream,然后勾选「Yes, secure this integration」
  • 在模板编辑框里输入$input.json('$'),这个模板会把请求体(不管是什么格式)转换成JSON格式传给Lambda
  • 保存所有配置,一定要重新部署API(这步很容易忘!)

方案2:设置API的默认媒体类型

如果希望整个API都默认用application/json处理无Content-Type的请求,可以这么做:

  • 进入你的API的「Settings」页面(在左侧导航栏最底部)
  • 找到「Default Media Type」选项,输入application/json并保存
  • 重新部署API,之后所有没有指定Content-Type的请求都会被默认当作application/json处理

额外验证:Lambda的兼容性

确保你的Lambda函数能处理空请求体或者非标准格式的输入,比如如果请求没有内容,函数里要避免直接解析JSON导致报错,可以加个判断逻辑:

import json

def lambda_handler(event, context):
    # 处理空请求体的情况
    if not event:
        return {
            'statusCode': 200,
            'body': json.dumps({'message': 'Empty request handled'})
        }
    # 正常业务逻辑
    # ...

测试验证

部署完成后,用CURL测试下:

curl -X POST https://your-api-id.execute-api.your-region.amazonaws.com/your-stage/your-resource

如果能正常返回响应,就说明问题解决了。

内容的提问来源于stack exchange,提问作者Aphro Pfotte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:25:19