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

如何移除或替换Swoole WebSocket响应中的Server响应头

OpenSwoole WebSocket服务修改/删除Server响应头方案

可以完全删除Server响应头,也可以将其替换为任意自定义名称,不需要修改OpenSwoole源码,有两种常用实现方式:

  • 配置项直接覆盖(推荐)
    启动服务时通过set方法传入server配置项即可直接覆盖默认的Server: OpenSwoole x.x.x响应头,配置为空字符串时会直接移除该响应头,示例代码:
    $ws = new Swoole\WebSocket\Server('0.0.0.0', 9501);
    $ws->set([
        'server' => 'XYZ' // 此处填写自定义的服务名,传入''则不返回Server响应头
    ]);
    // 后续注册消息接收、连接关闭等业务事件回调即可
    
    该方式不需要改动原有握手逻辑,不会引入额外兼容性问题。
  • 握手回调手动调整
    如果需要对握手阶段的响应头做更细粒度的控制,可以注册handshake事件回调,在回调中手动修改/移除Server头,示例代码:
    $ws->on('handshake', function (Swoole\Http\Request $req, Swoole\Http\Response $resp) {
        // 移除默认Server头
        $resp->header('Server', null);
        // 若要替换为自定义值,改用下行代码即可
        // $resp->header('Server', 'XYZ');
    
        // 必须补全标准WebSocket握手所需的响应逻辑,否则握手会失败
        $key = $req->header['sec-websocket-key'];
        $accept = base64_encode(sha1($key . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true));
        $resp->header('Upgrade', 'websocket');
        $resp->header('Connection', 'Upgrade');
        $resp->header('Sec-WebSocket-Accept', $accept);
        $resp->header('Sec-WebSocket-Version', '13');
        $resp->status(101);
        $resp->end();
    });
    

注意:自行实现handshake回调时,必须严格遵循WebSocket协议规范返回握手响应,否则会导致客户端连接失败。仅需修改Server头的场景优先使用第一种配置项方案。

内容的提问来源于stack exchange,提问作者Rajan Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:15:35