Perspective in iframe: Websocket issues

Hello,
I'm embedding ignition in an iframe. The domain of iframe and parent are different and I've set

wrapper.java.additional.1=-Dignition.http.header.x_frame_options.enabled=false
wrapper.java.additional.2=-Dignition.http.header.x_frame_options.value=

The setup works in firefox, but in chrome, the connection fails with

store.Channel: Websocket connection closed. code=1006, wasClean=false, reason=No reason given, codeMeaning=Code not defined, codeDescription=Code out of range.

What makes it most puzzling is the fact that there's an exception in the ignition logs only when using chrome:

jvm 1    | 2025/03/21 12:24:13 | java.lang.UnsupportedOperationException: Feature unsupported after Upgraded to WebSocket
jvm 1    | 2025/03/21 12:24:13 | 	at org.eclipse.jetty.websocket.core.server.internal.UpgradeHttpServletRequest.getSession(UpgradeHttpServletRequest.java:293)
jvm 1    | 2025/03/21 12:24:13 | 	at com.inductiveautomation.perspective.gateway.comm.Routes.getOrCreateSession(Routes.java:1765)
jvm 1    | 2025/03/21 12:24:13 | 	at com.inductiveautomation.perspective.gateway.comm.PerspectiveWebSocketServlet$PerspectiveWebSocketCreator.createWebSocket(PerspectiveWebSocketServlet.java:185)
jvm 1    | 2025/03/21 12:24:13 | 	at com.inductiveautomation.perspective.gateway.comm.PerspectiveWebSocketServlet$PerspectiveWebSocketCreator.createWebSocket(PerspectiveWebSocketServlet.java:123)
jvm 1    | 2025/03/21 12:24:13 | 	at org.eclipse.jetty.websocket.server.JettyWebSocketServlet$WrappedJettyCreator.createWebSocket(JettyWebSocketServlet.java:276)
jvm 1    | 2025/03/21 12:24:13 | 	at org.eclipse.jetty.websocket.core.server.internal.CreatorNegotiator.lambda$negotiate$0(CreatorNegotiator.java:64)
jvm 1    | 2025/03/21 12:24:13 | 	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1451)
jvm 1    | 2025/03/21 12:24:13 | 	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1488)
jvm 1    | 2025/03/21 12:24:13 | 	at org.eclipse.jetty.websocket.core.server.internal.CreatorNegotiator.negotiate(CreatorNegotiator.java:63)
jvm 1    | 2025/03/21 12:24:13 | 	at org.eclipse.jetty.websocket.core.server.internal.AbstractHandshaker.upgradeRequest(AbstractHandshaker.java:76)
jvm 1    | 2025/03/21 12:24:13 | 	at org.eclipse.jetty.websocket.core.server.internal.HandshakerSelector.upgradeRequest(HandshakerSelector.java:39)
jvm 1    | 2025/03/21 12:24:13 | 	at org.eclipse.jetty.websocket.core.server.WebSocketMappings.upgrade(WebSocketMappings.java:241)
jvm 1    | 2025/03/21 12:24:13 | 	at org.eclipse.jetty.websocket.server.JettyWebSocketServlet.service(JettyWebSocketServlet.java:181)
jvm 1    | 2025/03/21 12:24:13 | 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
jvm 1    | 2025/03/21 12:24:13 | 	at com.inductiveautomation.ignition.gateway.bootstrap.MapServlet.service(MapServlet.java:86)

I needed to make sure that cookies are set correctly. They need to be SameSite=None, HttpOnly and Secure in my setup

1 Like