Workerman WebSocket怎么获取请求头

夏墨同学_6093

夏墨同学_6093

2026-09-04

896人浏览

原创

websocket连接的header只能在onconnect回调中读取,因握手完成后即切换为帧通信、header信息不再保留;需用$connection->getheader('key')(key全小写)获取,如origin、sec-websocket-protocol等,并可存入$connection属性供后续使用。

workerman websocket怎么获取请求头

WebSocket连接建立时的Header只能在onConnect里读

Workerman的WebSocket协议解析器在握手阶段(HTTP Upgrade)会把原始请求头完整保留,但只暴露给onConnect回调;一旦升级完成进入onMessage,就不再持有Header信息——因为WebSocket帧本身不带Header。

常见错误是试图在onMessage里调用$request->header()$connection->getHeader(),这些方法根本不存在。WebSocket连接对象$connection没有Header访问接口,只有HTTP请求对象才有。

  • 必须在onConnect中处理Header,例如提取origin做来源校验、读取sec-websocket-protocol协商子协议
  • Header key 全部转为小写,$connection->getHeader('User-Agent')会失败,得写$connection->getHeader('user-agent')
  • 如果需要在后续onMessage中使用Header数据,必须提前存到$connection属性上,比如$connection->origin = $connection->getHeader('origin');

怎么拿到Origin、Referer这些关键Header

浏览器发起WebSocket连接时,会带标准HTTP请求头,包括originreferercookie等。Workerman在onConnect回调中通过$connection->getHeader()可直接读取。

注意:getHeader()返回的是字符串,不是数组;没有getHeaders()批量获取方法。想看全量,只能一个个试:

WebSocket 8.18.2
WebSocket 8.18.2

WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。

下载
  • $connection->getHeader('origin') → 判断是否允许跨域连接
  • $connection->getHeader('cookie') → 拿原始Cookie字符串,但不能直接解析,需手动parse_str()(不推荐,见下一条)
  • $connection->getHeader('sec-websocket-key') → 协议握手必需,框架内部已用,一般不用动
  • 自定义Header如X-Device-ID,写成$connection->getHeader('x-device-id')

为什么不能在onMessage里用Http::input()取Header

Http::input()是Workerman\Protocols\Http模块提供的统一输入入口,但它只对HTTP协议有效;WebSocket协议不走这个路径,Http::input('header.xxx')在WebSocket连接中始终返回null

根本原因是:WebSocket握手完成后,连接已脱离HTTP语义,Workerman底层切换为WebSocket帧解析器,不再维护Http::input缓存。你看到的Http::input文档示例,全部基于http://协议启动的Worker。

  • 别试图在onMessage里require Workerman\Protocols\Http\Request再伪造请求对象——Header早已丢失,无法还原
  • 如果业务强依赖Header(比如鉴权),必须在onConnect里完成校验并决定是否$connection->close(),否则放行后就再无补救机会
  • Cookie值若需复用,请在onConnect中解析cookie头并存入$connection->cookie_data,避免每次消息都重复解析

nginx代理下如何拿到真实X-Forwarded-For和X-Real-IP

当WebSocket连接经过nginx反向代理时,原始客户端IP和部分Header会被覆盖。nginx需显式透传,且Workerman必须从onConnect的Header中读取,而不是靠$connection->getRemoteIp()(它返回的是nginx的IP)。

nginx配置关键项:

location /ws {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
  • Workerman侧用$connection->getHeader('x-real-ip')$connection->getHeader('x-forwarded-for')获取
  • 注意X-Forwarded-For可能是逗号分隔的IP链,取第一个即可:explode(',', $connection->getHeader('x-forwarded-for'))[0] ?? ''
  • 如果nginx没配proxy_set_header,这些Header在onConnect里就是null,没有fallback机制
Header的生命周期极短,只存在于WebSocket握手那一瞬间。错过onConnect,后面所有消息都无法追溯来源上下文——这是最容易被忽略的设计约束。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

websocket workerman

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Golang WebSocket与实时通信开发
Golang WebSocket与实时通信开发

本专题系统讲解 Golang 在 WebSocket 开发中的应用,涵盖 WebSocket 协议、连接管理、消息推送、心跳机制、群聊功能与广播系统的实现。通过构建实际的聊天应用或实时数据推送系统,帮助开发者掌握 如何使用 Golang 构建高效、可靠的实时通信系统,提高并发处理与系统的可扩展性。

2025.12.22

175

11

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

2026.01.19

376

22

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

2026.03.18

355

14

WebSocket 前端开发与实战技巧
WebSocket 前端开发与实战技巧

聚焦 WebSocket 在前端项目中的工程化实践,涵盖原生 JavaScript WebSocket 连接的封装与状态管理、Vue 3 中 WebSocket 的 Composable 封装(useWebSocket)、React 中自定义 Hook 管理连接生命周期、心跳检测(Ping/Pong 定时器)与自动断线重连的实现策略、指数退避重连算法、消息序列化协议(JSON / Protobuf / MessagePack)的选型与性

2026.05.25

348

33

WebSocket发送和接收数据教程合集
WebSocket发送和接收数据教程合集

本专题整合了WebSocket发送与接收数据教程合集,阅读专题下面的文章了解更多详细内容。

2026.05.25

281

20

Workerman安装配置教程
Workerman安装配置教程

Workerman安装配置教程专题提供Workerman安装配置、WebSocket开发、TCP通信、异步编程、高并发服务搭建与PHP实时通信开发教程。

2026.05.20

146

15

Workerman实时通信与长连接开发教程
Workerman实时通信与长连接开发教程

WWorkerman实时通信与长连接开发教程聚合实时通信、聊天室、长连接、消息推送、AI流式输出等Workerman高并发开发内容。

2026.05.20

162

12

Workerman异步通信与TCP服务器开发
Workerman异步通信与TCP服务器开发

Workerman异步通信与TCP服务器开发专题整理Workerman异步通信、TCP服务、HTTP服务、WebSocket开发与高并发PHP服务器教程。

2026.05.20

127

13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebSocket手册
WebSocket手册

共0课时 | 0人学习

Webman中文手册
Webman中文手册

共0课时 | 0人学习