[英]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.