是否可以向 RxJs Websocket 添加请求标头?

Kod*_*_12 9 javascript websocket rxjs angular

我正在寻找从我的角度应用程序到服务器创建基本的 Websocket 连接。根据 RxJs 文档,“websocket”方法是浏览器提供的 WebSocket 对象的包装器:

import { Injectable } from '@angular/core';
import { webSocket } from 'rxjs/webSocket';

@Injectable({
  providedIn: 'root'
})

export class WebSocketService {

  connect(url: string) {
    return webSocket(url);
  }
}
Run Code Online (Sandbox Code Playgroud)

虽然这些示例非常简单,但令我惊讶的是缺乏有关浏览器需要将数据作为请求标头(即身份验证令牌)的一部分发送给服务器以满足请求的场景的文档。JavaScript WebSockets 支持吗?

我已经看到了一种解决方法,其中 websocket url 将添加令牌作为查询参数(见下图),但这是一个应该避免的安全漏洞。任何建议或参考都会有所帮助!

在此输入图像描述

Lau*_*uer 1

不。

底层 API 不支持任何附加参数(URL 和协议除外)。

有关更多详细信息,请查看此答案

链接答案中未解释的一种可能的解决方案是,您可以在先前的请求中从服务器设置 cookie。当您打开 WebSocket 时,应该将该 cookie 重新发送到服务器。为此,请确保在 HttpService 中启用withCredentials