Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Microsoft Edge does not allow localhost loopback for websockets

I have web-site and desktop application, and I want to connect them by websockets. So my web-site tries to connect to wss://localhost:8080, for example.

It works in IE11, but in "MS Edge" I have an error:

Cross zone request is not allowed

I have this problem on Win10 10240, so the flag "Allow localhost loopback" is enabled by default, and it did not help.

When I use CheckNetIsolation LoopbackExempt -a -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe" or this utility, all works as expected.

So, is this a case, that in new builds of "MS Edge" loopbacks are allowed for http, but not allowed for websockets? And if so, is it possible to make some workaround, and not to force my users to run some shell comand or to download externall utility?

Related question: Can't open localhost in Microsoft Edge (Project Spartan) in Windows 10 preview

like image 524
azaviruha Avatar asked Jul 21 '15 13:07

azaviruha


3 Answers

In the Microsoft Edge browser type "About:flags" in the title bar (search bar). No quotes, Tick/Un-tick the "allow Localhost Loopback" feature.

Edge on Win Build 10240. (still works upto New Edge (chrome based))

like image 137
Narcarsiss Avatar answered May 16 '23 03:05

Narcarsiss


After some research I found the source of error. Here is my repo, to reproduce error: https://github.com/AZaviruha/ms-edge-ws-strange

In short, when you call new WebSocket in MS Edge, it does not generate exception, when you call it with wrong "local"-host argument:

var socket, path;
var hosts = ['localhost', '127.0.0.1'];

for (var i in hosts) {
    path = 'ws://'+hosts[i]+':9446';
    console.log( '===> Tested path :: ', path );
    try {
        socket = new WebSocket( path );
        break;
    }
    catch ( e ) {
        // !!! Never shown !!!
        console.error( '===> WebSocket creation error :: ', e );
    }
}

Because of this, you can't "retry" to connect with different hosts.

By the way, if you try non-local non-existent host, it will generate exception!

like image 24
azaviruha Avatar answered May 16 '23 03:05

azaviruha


This recently happened to me again after doing the Windows 10 Creator's Update (1703).

But the fix was easy. I had to

  1. Check the "allow Localhost Loopback" feature mentioned by @Narcarsiss (not sure if that got disabled in the update, or I just never checked it myself previously).
  2. Specify the protocol in the address bar (http://localhost:5000/ instead of just localhost:5000/).

After doing both I was able to access my localhost sites again in MS Edge.

like image 37
coding-for-fun Avatar answered May 16 '23 02:05

coding-for-fun