API GatewayのBinaryMediaTypesはリクエストヘッダーのAcceptは*/*ではダメ
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