{"id":"276506429232aa7c","repo":"aio-libs/aiohttp","slug":"no-connection-upgrade-hdr-headers-get-hdrs-conne","errorCode":null,"errorMessage":"No CONNECTION upgrade hdr: {headers.get(hdrs.CONNECTION)}","messagePattern":"No CONNECTION upgrade hdr: (.+?)","errorType":"http","errorClass":"HTTPBadRequest","httpStatus":400,"severity":"error","filePath":"aiohttp/web_ws.py","lineNumber":283,"sourceCode":"        assert payload_writer is not None\n        self._post_start(request, protocol, writer)\n        await payload_writer.drain()\n        return payload_writer\n\n    def _handshake(\n        self, request: BaseRequest\n    ) -> tuple[\"CIMultiDict[str]\", str | None, int, bool]:\n        headers = request.headers\n        if \"websocket\" != headers.get(hdrs.UPGRADE, \"\").lower().strip():\n            raise HTTPBadRequest(\n                text=(\n                    f\"No WebSocket UPGRADE hdr: {headers.get(hdrs.UPGRADE)}\\n Can \"\n                    '\"Upgrade\" only to \"WebSocket\".'\n                )\n            )\n\n        if not request._message.upgrade:\n            raise HTTPBadRequest(\n                text=f\"No CONNECTION upgrade hdr: {headers.get(hdrs.CONNECTION)}\"\n            )\n\n        # find common sub-protocol between client and server\n        protocol: str | None = None\n        if hdrs.SEC_WEBSOCKET_PROTOCOL in headers:\n            req_protocols = [\n                str(proto.strip())\n                for proto in headers[hdrs.SEC_WEBSOCKET_PROTOCOL].split(\",\")\n            ]\n\n            for proto in req_protocols:\n                if proto in self._protocols:\n                    protocol = proto\n                    break\n            else:\n                # No overlap found: Return no protocol as per spec\n                ws_logger.warning(","sourceCodeStart":265,"sourceCodeEnd":301,"githubUrl":"https://github.com/aio-libs/aiohttp/blob/c0ef574e29109210e96e652771ae4e7b88615fa4/aiohttp/web_ws.py#L265-L301","documentation":"Error \"No CONNECTION upgrade hdr: {headers.get(hdrs.CONNECTION)}\" thrown in aio-libs/aiohttp.","triggerScenarios":"Thrown at aiohttp/web_ws.py:283 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"analyzedSha":"c0ef574e29109210e96e652771ae4e7b88615fa4","analyzedAt":"2026-08-04T19:51:05.467Z","schemaVersion":2}