对我的 socket.io 服务器的请求中未定义 HTTP 协议版本?

HTTP protocol version undefined in requests to my socket.io server?

我在 AWS EC2 实例上设置了 socket.io 服务器。与大多数人一样,我能够很好地连接,但是我 运行 遇到了一些未定义 HTTP 协议版本的用户的问题。我已经向我的套接字 io 服务器提供了两个请求,一个具有预期的 HTTP 版本,一个未定义。似乎否则请求是相同的,这让我相信 HTTP 版本是问题。

GET 请求工作正常(删除了特定的 ip/website 信息)

GET /socket.io/?EIO=3&transport=polling&t=Nit_A4F HTTP/1.1
Host: {{My EC2 Host:Port}}
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: {{My Website}}
Connection: keep-alive
Referer: {{My Website}}

GET 请求失败 (注意第 1 行,其中 HTTP 版本未定义,而不是 HTTP/1.1)

GET /socket.io/?EIO=3&transport=polling&t=Nit_UGj undefined
Host: {{My EC2 Host:Port}}
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: {{My Website}}
Connection: keep-alive
Referer: {{My Website}}
Pragma: no-cache
Cache-Control: no-cache

这个问题确实有几个问题。首先,未定义的 HTTP 协议版本是常见的还是合理的用例?如果是这样,有没有办法可以在前端手动设置 HTTP 协议版本(Angular),或者设置 CORS 来处理后端未定义的 HTTP 协议版本?

如果未定义的 HTTP 协议版本不是一个合理的用例,这些用户可以做些什么来解决它吗?

这是我当前在后端使用 CORS 的 socket.io 设置:

const io = require('socket.io')(server, {
  cors: {
    origin: '*',
    methods: ['GET', 'POST'],
    transports: [ 'websocket', 'polling' ],
    credentials: true,
  }
});

除了连接到正确的 url 之外,我的前端没有太多内容,但这里以防万一:

export class SocketIOService {
  private socket: io.Socket;

  constructor() {
    this.socket = io(
      environment.socketUrl
    );
  }

  sendData(socketEvent: string, data: any) {
    this.socket.emit(socketEvent, data);
  }

  getData(socketEvent: string) {
    return new Observable(observer => {
      this.socket.on(socketEvent, msg => {
        console.log("handling event");
        observer.next(msg);
      });
    });
  }
}

如有任何帮助,我们将不胜感激。

对于任何想知道为什么会出现这个特定问题的答案的人,我不能说我有答案。

适用于我的解决方案是升级我的前端和后端以通过 https 而不是 http 进行通信。