🚨

API GatewayのBinaryMediaTypesはリクエストヘッダーのAcceptは*/*ではダメ

2023/07/20に公開

AWS LambdaとBinary Media Types: Acceptヘッダーの重要性

AWS LambdaとAPI Gatewayを使用してバイナリデータを扱うとき、Acceptヘッダーの設定には注意が必要です。この記事ではその詳細について解説します。

Binary Media Typesとは

AWS API Gatewayでは、Binary Media Typesの設定を通じ、バイナリデータのリクエストとレスポンスを扱うことができます。
これにより、画像や音声などのメディアファイルを直接API経由で送受信できます。

詳しくは公式ドキュメントを参照ください。
ref: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings.html

AcceptヘッダーとBinary Media Types

リクエストがBinary Media Typeとして処理されるかどうかは、リクエストヘッダーのAcceptフィールドにより決まります。
API GatewayはAcceptフィールドの値をチェックし、その値がAPI GatewayのBinary Media Types設定と一致する場合にのみリクエストをバイナリデータとして扱います。

*/*というワイルドカードの問題

一般に、*/*というワイルドカードは全てのメディアタイプを表します。
しかし、API GatewayのBinary Media Types設定ではこのワイルドカードは具体的なバイナリメディアタイプとは一致しないと解釈されます。
したがって、特定のバイナリデータを扱う場合にはAcceptヘッダーにその具体的なメディアタイプ(例えばimage/pngなど)を指定する必要があります。

Postmanを使うとデフォルトでAcceptヘッダーが*/*になっているため、意識しないとAPI GatewayのBinary Media Types設定と一致しないという問題が発生します。

まとめ

AWS LambdaとAPI Gatewayを使ってバイナリデータを扱う際にはAcceptヘッダーの設定に注意が必要です。
特に*/*というワイルドカードは全てのメディアタイプを表すものの、API GatewayのBinary Media Types設定とは一致しないとされるため、具体的なメディアタイプを指定することが重要です。

Discussion