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

JavaScript连接OCPP服务器WebSocket时Authorization头可行性疑问

关于OCPP 2.0.1 WebSocket连接携带Authorization头的疑问解答

首先纠正一个常见误区:WebSocket握手阶段本身支持携带自定义HTTP请求头,只是浏览器端的原生WebSocket API没有提供设置自定义头的接口,但这并不等于所有场景都无法实现OCPP的要求。

为什么OCPP 2.0.1规范会有这个要求?

OCPP的这个要求完全合理,原因有两点:

  • WebSocket的连接建立本质是基于HTTP/1.1的升级请求(遵循RFC 6455),而HTTP协议本身允许自定义请求头,包括Authorization头,这是符合协议规范的操作。
  • 充电站作为物联网设备,在连接服务器前验证身份是核心安全需求,握手阶段就完成认证能避免未授权设备占用连接资源,也符合常规的服务端安全设计逻辑。

浏览器端无法设置自定义头的替代方案

如果你的场景是浏览器端JavaScript连接OCPP服务器,因为原生API限制确实没法直接设置Authorization头,可以用以下替代方案:

  • 将认证信息放在WebSocket连接URL的查询参数中,比如:wss://your-server/ws?chargePointId=XXX&authKey=XXX,服务器端解析URL参数完成验证。
  • 若存在同域或允许跨域Cookie的场景,可将认证信息存入Cookie,服务器从Cookie中获取验证。

非浏览器环境的实现方式

对于OCPP规范针对的充电站设备(嵌入式系统、后端服务等非浏览器场景),完全可以实现携带Authorization头的WebSocket连接。比如Node.js环境使用ws库时,直接通过配置项设置请求头:

const WebSocket = require('ws');
const chargePointId = 'CP-001';
const authKey = 'your-secret-key';
const authHeader = 'Basic ' + Buffer.from(`${chargePointId}:${authKey}`).toString('base64');

const ws = new WebSocket('wss://your-ocpp-server/ws', {
  headers: {
    'Authorization': authHeader
  }
});

内容的提问来源于stack exchange,提问作者man developer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:17:06