django / django/daphne

Missing 'scheme' key in ws scope

Open
#538 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
2.7k
Forks
292
Avg merge
2d 15h
Merged PRs (30d)
3

Description

#### Environment
python: 3.11.5
aiofiles==23.2.1
blinker==1.8.2
click==8.1.7
Flask==3.0.3
h11==0.14.0
h2==4.1.0
hpack==4.0.0
Hypercorn==0.17.3
hyperframe==6.0.1
itsdangerous==2.2.0
Jinja2==3.1.4
MarkupSafe==2.1.5
pathvalidate==3.2.1
priority==2.0.0
PyJWT==2.9.0
pyzmq==26.0.3
Quart==0.19.6
Quart-JWT-Extended==0.1.0
six==1.16.0
Werkzeug==3.0.3
wsproto==1.2.0

OS: OpenSUSE Tumbleweed
Browser: Firefox 132.0.1

#### CMD
daphne run_service:quart_app -e ssl:44444:privateKey=../dev/ssl/key.pem:certKey=../dev/ssl/cert.pem

#### Issue
While running a [Quart](https://github.com/pallets/quart/tree/main) app i get the following stacktrace on a websocket request:
```
2024-11-06 17:01:34,181 | ERROR: Exception inside application: 'scheme' (server.py:297)
Traceback (most recent call last):
File "/LOCAL/garcia/Projects/triplaystudio/.venv/lib/python3.11/site-packages/quart/app.py", line 1667, in __call__
await self.asgi_app(scope, receive, send)
File "/LOCAL/garcia/Projects/triplaystudio/.venv/lib/python3.11/site-packages/quart/app.py", line 1693, in asgi_app
await asgi_handler(receive, send)
File "/LOCAL/garcia/Projects/triplaystudio/.venv/lib/python3.11/site-packages/quart/asgi.py", line 166, in __call__
websocket = self._create_websocket_from_scope(send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/LOCAL/garcia/Projects/triplaystudio/.venv/lib/python3.11/site-packages/quart/asgi.py", line 204, in _create_websocket_from_scope
self.scope["scheme"],
~~~~~~~~~~^^^^^^^^^^
KeyError: 'scheme'
10.242.2.5:57258 - - [06/Nov/2024:17:01:34] "WSDISCONNECT /conn" - -
```
It seems like the 'scheme' property is missing for the websocket connection scope. I am not 100% sure if this issue belongs to daphne, since the [asgi documentation](https://asgi.readthedocs.io/en/latest/specs/www.html#websocket) marks 'scheme' as an optional setting. However, the documentation also states 'but must not be empty'. If this is indeed related to the Quart project i am really sorry for posting it here. I tested the same code with [Hypercorn](https://github.com/pgjones/hypercorn), so the actual request itself should not be an issue here.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.