You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSocket服务端指定URL路径不生效,如何限制仅指定路径可连接

问题原因
  • 你使用的websockets库的serve方法默认会监听当前端口下所有路径的WebSocket连接请求,全部转发给你注册的web_server处理函数
  • 你的处理逻辑里完全没有用到函数传入的path参数做路径校验,不管请求路径是/还是/websocket,都会执行相同的消息推送逻辑,自然两种情况都能连接成功、返回内容一致。
解决方法

在web_server处理函数的最开头加入路径校验逻辑,如果请求路径不符合要求,直接关闭WebSocket连接即可,修改后的服务端代码如下:

import asyncio
import json
import websockets

# 此处补充你原有代码缺失的sub对象定义,实际使用时替换为你自己的业务逻辑即可
sub = type('Sub', (), {'status': {'data': '测试消息'}})()

async def web_server(websocket, path):
    # 新增路径校验逻辑
    if path != '/websocket':
        # 路径不符合直接关闭连接,1008为标准关闭码代表政策不允许,也可自定义原因
        await websocket.close(code=1008, reason="仅支持/websocket路径连接")
        return
    # 原有业务逻辑保持不变
    while True:
        publish_to_client = json.dumps(sub.status)
        await websocket.send(publish_to_client)
        await asyncio.sleep(0.1)

if __name__ == "__main__":
    start_server = websockets.serve(web_server, "111.111.11.111", 8080)
    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()

修改完成后,客户端如果使用不带/websocket的地址发起请求,会直接被服务端拒绝连接,只有路径完全匹配的请求才能正常建立连接、接收服务端推送的消息。

内容的提问来源于stack exchange,提问作者Ky P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:57:04