簡體   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