Skip to content

Nginx Unit not conforming to ASGI spec on websocket connections #1507

Open
@FixFlare

Description

I'm using the "Litestar" package to host a python API using Nginx Unit.

During development I used Litestar's recommended dev server "uvicorn" and did not experience any issues until I deployed to production running Nginx Unit and then got the error "405: Method Not Allowed" when I tried to make my websocket connections.

Tracing the issue, I found that the method being sent on the websocket connection was set to "GET" and the way Litestar handles determining if it's a websocket connection is based on the method being "None" so the fact that Nginx Unit is sending "GET" for the request is breaking it.

When I check the websocket spec, page 17, point 2 it says

"The method of the request MUST be GET, and the HTTP version MUST be at least 1.1."

So I initially thought Litestar was the problem and filed an issue over there.

The Litestar maintainers advised that the ASGI spec does not include a "method" key and so it would in theory be against the ASGI spec for Nginx Unit to be sending it.

If you take a look at the ASGI specs, the websocket scope does not define a method key: https://asgi.readthedocs.io/en/latest/specs/www.html#websocket-connection-scope.

The RFC you are referring to is the initial request, which isn't handled by the ASGI app, but the ASGI server.

I have a more detailed writeup over on the Litestar github here

I also made a git repo that allows you to reproduce the problem here: https://github.com/FixFlare/bug_3887

If I can clarify anything about the repo or the issue please let me know.

Thanks,

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions