Skip to content

HTTP

Mangum provides support for the following AWS HTTP Lambda Event Source:

from fastapi import FastAPI
from fastapi.middleware.gzip import GZipMiddleware
from mangum import Mangum

app = FastAPI()
app.add_middleware(GZipMiddleware, minimum_size=1000)


@app.get("/")
async def main():
    return "somebigcontent"

handler = Mangum(app, TEXT_MIME_TYPES=["application/vnd.some.type"])

Configuring binary responses

Binary responses are determined using the Content-Type and Content-Encoding headers from the event request and a list of text MIME types.

Text MIME types

By default, all response data will be base64 encoded and include isBase64Encoded=True in the response except the following MIME types:

  • application/json
  • application/javascript
  • application/xml
  • application/vnd.api+json
  • application/vnd.oai.openapi

Additionally, any Content-Type header prefixed with text/ is automatically excluded.

Compression

If the Content-Encoding header is set to gzip or br, then a binary response will be returned regardless of MIME type.

State machine

The HTTPCycle is used by the adapter to communicate message events between the application and AWS. It is a state machine that handles the entire ASGI request and response cycle.

HTTPCycle

class mangum.protocols.http.HTTPCycle(scope, body)
async run(self, app)
async receive(self)
async send(self, message)

HTTPCycleState

class mangum.protocols.http.HTTPCycleState(value, names=None, *, module=None, qualname=None, type=None, start=1)

The state of the ASGI http connection. * REQUEST - Initial state. The ASGI application instance will be run with the connection scope containing the http type. * RESPONSE - The http.response.start event has been sent by the application. The next expected message is the http.response.body event, containing the body content. An application may pass the more_body argument to send content in chunks, however content will always be returned in a single response, never streamed. * COMPLETE - The body content from the ASGI application has been completely read. A disconnect event will be sent to the application, and the response will be returned.