I'm using API Gateway Lambda proxy integration and trying to return a binary application/protobuf
response. No matter what I do, the response body is always a base64 encoded string
- I have
application/protobuf
setup as abinary media types
in APIG - My client (javascript) is sending following headers in the
POST
:Accept: application/protobuf Content-Type: application/protobuf
- My lambda is responing with
content-type: application/protobuf
, and correctly setting theIsBase64Encoded
Lambda response totrue
How do you get APIG to base64 decode the string? I swear I had this working a few months ago when I 1st tried this.
Note: I've also tried */*
as a binary media types
Some related posts to add background:
- https://github.com/twitchtv/twirp/issues/81
- https://github.com/awslabs/aws-serverless-express/issues/39#issuecomment-276019222
Update:
Turns out I can only get it working if binary media type
is set to */*
. The client Accept
header has no impact once it is set to this.
Many bad side effects of using */*
because every response is attempted to get decoded (even when IsBase64Encoded is false or not set)
I thought it wasn't decoding because Chrome network inspect tools will always show binary data as base64 encoded in the Preview
tab. You can see the protobuf in the Response
tab.