Hi,

  I want to add WebSocket extension support to my Django channels consumer 
class. As I know a list of accepted extensions should be included in the 
headers of the handshake response of the consumer. I tried adding the 
response headers, however browser does not get them. I am not sure whether 
its a bug, or I have done something wrong.

  As specified in the asgiref documentation: "websocket.accept" message can 
have "headers" section 
https://asgi.readthedocs.io/en/latest/specs/www.html#accept-send-event
  In my AsyncJsonWebsocketConsumer class I am accepting the connection with 
this code:

    await self.base_send({
      "type": "websocket.accept",
      "subprotocol": None,
      "headers": [(b'sec-websocket-extensions', b'permessage-deflate')]
    })

  since the original accept() method implementation does not have headers 
parameter 
https://github.com/django/channels/blob/507cb54fcb36df63282dd19653ea743036e7d63c/channels/generic/websocket.py#L184

  With this implementation latest Chrome/Firefox does not receive 
"Sec-WebSocket-Extensions: permessage-deflate" headeres in the handshake 
response. For example, I provide request and response headers:

  The request headers are:

GET ws://localhost:8080/ws/my_route/ HTTP/1.1
Host: localhost:8080
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, 
like Gecko) Chrome/83.0.4103.97 Safari/537.36
Upgrade: websocket
Origin: http://localhost:8200
Sec-WebSocket-Version: 13
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Sec-WebSocket-Key: XXXXXXXXXXXXXXXXXXXXXX==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits


  The response headers are:

HTTP/1.1 101 Switching Protocols
Server: Daphne
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: XXXXXXXXXXXXXXXXXXXXXXXXXXX=



  I am using manage.py runserver command. Major packages of my pip freeze 
are:

aiohttp==3.6.2
aioredis==1.2.0
asgiref==3.2.9
async-timeout==3.0.1
asyncio==3.4.3
billiard==3.6.0.0
channels==2.4.0
channels-redis==2.4.0
daphne==2.3.0
Django==2.2
django-cors-headers==2.3.0
django-crequest==2018.5.11
gunicorn==19.9.0
pika==0.12.0
redis==3.2.1
tornado==5.1
Twisted==18.9.0
txaio==18.8.1
urllib3==1.24.1


    Maybe you could advice me how to find the reason why the response 
headers are ignored? Should I report this as a bug to channels/asgiref?

Best regards,
Albertas

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/00693eea-809b-495e-a0a7-b70792065d15o%40googlegroups.com.

Reply via email to