Я читал о WebSockets, и интересно, почему браузер не мог просто открыть тривиальное соединение TCP и связаться с сервером как любое другое настольное приложение. И почему эта коммуникация возможна через websockets?
Когда вы работаете в пределах интрасети, проще общаться через TCP-сокеты, так как вы, вероятно, имеете контроль над машинами в этой сети и может открывать порты, подходящие для установления TCP-соединений.
Через Интернет вы общаетесь с чужим сервером на другом конце. У них крайне маловероятно, чтобы какой-либо старый сокет был открыт для соединений. Обычно у них будет всего несколько стандартных, например порт 80 для HTTP или 443 для HTTPS. Итак, для связи с сервером вы должны подключиться через один из этих портов.
Учитывая, что это стандартные порты для веб-серверов, которые обычно используют HTTP, вы обязаны соответствовать протоколу HTTP, иначе сервер не будет разговаривать с вами. Назначение веб-сокетов - позволить вам инициировать соединение через HTTP, но затем согласовать использование протокола веб-сокетов (при условии, что сервер может это сделать), чтобы разрешить поток связи, более похожий на «сокет TCP».