Können Websockets (oder Ajax Long Polling usw.) auf einem anderen Port ausgeführt als die ursprüngliche HTTP-Anfrage?

StackOverflow https://stackoverflow.com/questions/5362100

  •  27-10-2019
  •  | 
  •  

Frage

Ich möchte eine Anwendung schreiben, die WebSockets mit node.js und socket.io in Kombination mit Django verwendet und Daten über Redis weitergeben (viele Schlagworte in diesem Satz!).

Wenn ich den Knoten auf einem anderen Port ausführe (z. B. 5555), kann ich mich mit einer Websocket (oder Fallback -Methode mit einer Fallback -Methode miteinander verbinden Socket.io, wie langwecke usw.) oder wird das Gleiche Ursprungsrichtlinie Gib mir Probleme?

Wenn ja, wie kann ich sie umgehen?

War es hilfreich?

Lösung

Socket.io unterstützt JSONP CORS was nicht von jedem Browser unterstützt wird). Zu Cross -Domain -Fach in Bezug auf Websockets - Spezifikation stellt Folgendes fest:

Der Server enthält den Hostnamen in der | Sec-Websocket Location | Feld seines Handschlags, damit sowohl der Client als auch der Server überprüft werden, ob er sich darauf einigen, welcher Host verwendet wird.

Sie sollten "WebSockets mit einem anderen Port verwenden" können. Tatsächlich haben Sie wahrscheinlich keine andere Wahl, da Standardports wie 80 von einem anderen Webserver verwendet werden, um Ihre Django -basierte Anwendung zu bedienen. Es wird auch potenzielle Probleme mit dem Browserspezifischen geben Parallele Verbindungsgrenzen Wenn Sie dieselbe Domäne und Port verwenden (beispielsweise können Sie dies im Facebook -Chat sehen, wenn Sie versuchen, mehr als eine Registerkarte im selben Browser -Kontext zu öffnen - jede Registerkarte ist während der langen Umfrage mit einer anderen Subdomäne verbunden, um diese Grenzen zu überwinden).

Andere Tipps

Die Antwort lautet "manchmal". Es ist sehr browser- und Sicherheitspolitik spezifisch.

Angenommen, Sie verwenden Socket.io ... Ich hatte keine Probleme, außer in der Oper, wo es die SOP-Regeln (gleichorientierte Richtlinien) nicht umgehen konnte. Das Fix war das Aktivieren von Websockets.

Socket.io Unterstützt Cross-Domain-Verbindungen (siehe FAQ). Ein anderer Port funktioniert gut.

Ich bin mir nicht sicher über WebSockets, obwohl Ajax Ihnen Probleme damit geben würde. Ich glaube, dass es jedoch mit einem serverseitigen Reverse-Proxy gelöst werden könnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top