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