讲师中心 微信公众号
AI工具推荐 视频效率加速

Workerman WebSocket怎么获取请求头

夏墨同学_6093

夏墨同学_6093

发布时间:2026-09-04 15:13:46

|

896人浏览过

|

来源于php中文网

原创

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,后面所有消息都无法追溯来源上下文——这是最容易被忽略的设计约束。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

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

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

175

2025.12.22

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

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

376

2026.01.19

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

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

375

2026.03.18

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

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

348

2026.05.25

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

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

281

2026.05.25

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

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

146

2026.05.20

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

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

162

2026.05.20

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

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

127

2026.05.20

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

0

2026.09.21

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webman中文手册
Webman中文手册

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn