繁体   English   中英

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

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

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

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

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 协议版本是常见的还是合理的用例? 如果是这样,有没有办法可以在前端(Angular)手动设置 HTTP 协议版本,或者设置 CORS 来处理后端未定义的 HTTP 协议版本?

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

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

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 进行通信。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM