Подтвердить что ты не робот

Настройка веб-узла на Apache?

Итак, я занимаюсь некоторыми исследованиями на веб-сайтах, и у меня есть несколько вопросов, на которые я не могу найти окончательного ответа:

  • Как настроить веб-сокет на моем Linux-сервере? Есть ли модуль Apache? Должен ли я использовать сторонний PHP-код или аналогичный?

  • Существуют ли какие-либо недостатки метода, описанного в вопросе 1, что я должен знать о совместимости с браузером?

  • Как я могу "обновить" мою установку websocket до безопасной установки websocket (ws://to wss://)? Будет ли это проще или сложнее, если SSL уже настроен на моем сервере Apache?

  • Есть ли какой-либо язык, который я мог бы использовать для подключения к моему веб-сокете, отличному от JavaScript?

  • Что такое метод запроса по умолчанию для веб-сокета?

4b9b3361

Ответ 1

Я не могу ответить на все вопросы, но я сделаю все возможное.

Как вы уже знаете, WS - это только постоянное полнодуплексное TCP-соединение с фреймированными сообщениями, где первоначальное подтверждение связи является HTTP-подобным. Вам нужен сервер, который прослушивает входящие запросы WS и связывает с ними обработчик.

Теперь это возможно с Apache HTTP Server, и я видел несколько примеров, но официальной поддержки нет, и это осложняется. Что сделает Апач? Где будет ваш обработчик? Там модуль, который перенаправляет входящие запросы WS во внешнюю общую библиотеку, но это не обязательно для других отличных инструментов для работы с WS.

Тенденции WS-сервера теперь включают в себя: Autobahn (Python) и Socket.IO (Node.js = JavaScript на сервере). Последний также поддерживает другие хакерские "постоянные" соединения, такие как длительный опрос и все COMET. Существуют и другие малоизвестные структуры WS-сервера, такие как Ratchet (PHP, если вы только знакомы с этим).

В любом случае вам нужно будет прослушивать порт, и, конечно, этот порт не может быть таким же, как и HTTP-сервер Apache, уже запущенный на вашем компьютере (по умолчанию = 80). Вы можете использовать что-то вроде 8080, но даже если этот конкретный вариант является популярным, некоторые брандмауэры могут все еще блокировать его, поскольку он не должен быть веб-трафиком. Вот почему многие люди выбирают 443, который является HTTP-защищенным портом, который по очевидным причинам брандмауэры не блокируются. Если вы не используете SSL, вы можете использовать 80 для HTTP и 443 для WS. Сервер WS не должен быть безопасным; мы просто используем порт.

Изменить. Согласно Iharob Al Asimi, предыдущий абзац неверен. У меня нет времени, чтобы исследовать это, поэтому, пожалуйста, см. Его работу для более подробной информации.

О протоколе, поскольку Википедия показывает, он выглядит следующим образом:

Клиент отправляет:

GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://example.com

Ответы сервера:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

и поддерживает соединение. Если вы можете реализовать это рукопожатие и базовую структуру сообщений (инкапсулируя каждое сообщение небольшим заголовком, описывающим его), тогда вы можете использовать любой язык на стороне клиента, который вы хотите. JavaScript используется только в веб-браузерах, потому что он встроен.

Как вы можете видеть, по умолчанию "метод запроса" является исходным HTTP GET, хотя это не HTTP и теряет все, что с HTTP после этого подтверждения. Я предполагаю, что серверы, которые не поддерживают

Upgrade: websocket
Connection: Upgrade

ответит с ошибкой или содержимым страницы.