Браузеры, как правило, не разрешают отправлять HTTP-запросы к доменам, отличным от того, на котором находится страница. Таким образом, файл client.html, который открывается как URL-адрес «file: // ...» в браузере, может общаться только с другими URL-адресами «file: // ...». (т.е. только статические страницы). Однако для socket.io необходим реальный веб-сервер на сервере, поэтому он должен быть «http: // ...»
Есть и другие соображения относительно того, как file: // urls обрабатываются по-разному. (например, вы не можете устанавливать файлы cookie, запросы XHR на файл: // URL не имеют кодов статуса HTTP и т. д.)