Могу ли я зарегистрировать пользовательскую схему / протокол URL на HTTP-сервере Node? - PullRequest
0 голосов
/ 28 апреля 2018

Я хотел бы иметь возможность обрабатывать пользовательскую схему URL с помощью Node HTTP API. Я хотел бы написать ссылки внутри веб-страниц, как это: app://foo/bar. Я хотел бы, чтобы обработчик запросов HTTP узла получал URL-адреса такого типа.

Когда я пытаюсь использовать этот тип настраиваемого протокола в своем URL, похоже, что Chrome не отправляет запрос, потому что он искажен. Так что на мой HTTP-сервер в Node ничего не попадает.

Возможно ли привязать ваш HTTP-сервер к пользовательской схеме или протоколу URL, например app://foo/bar?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

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

Я слышал, что вы хотите обслуживать некоторые файлы с localhost, но не загрязнять пространство имен существующего веб-сервера.

У меня есть несколько странных альтернативных решений:

  1. Просто выберите пространство имен, которое вряд ли будет использоваться пользователем. Вы можете начать с подчеркивания или знака доллара? Или вы можете просто очень случайное число.
  2. Вы можете обслуживать свои файлы, но только если существует параметр URI с очень случайной строкой. PHP делает это, чтобы служить логотипом PHP, например.
  3. Вы не можете реально изменить схему без создания надстроек браузера, но вы делаете контролируете порт TCP. Вы можете запустить второй веб-сервер на втором порту.
  4. Вы можете использовать второй домен. Просто зарегистрируйте домен и укажите запись A на 127.0.0.1. Теперь ваш веб-сервер, работающий на localhost, может проверить заголовок Host: и обслуживать ваши файлы, если он соответствует вашему специальному имени хоста.
0 голосов
/ 28 апреля 2018

Только некоторые протоколы, такие как http:// и https://, будут отправлены на ваш http-сервер nodejs. Это проблема. Ваш сервер node.js является http-сервером. Браузер Chrome отправляет ему URL-адреса только с протоколом http, который, как он знает, относится к серверу http.

Пользовательский протокол должен сначала обрабатываться в браузере с помощью надстройки браузера, которая затем может решать, что с ним делать.


Возможно, вы хотите использовать собственный URL-адрес HTTP, например:

http://yourserver.com/foo/bar

Затем ваш http-сервер node.js получит часть запроса /foo/bar, и вы можете написать собственные обработчики для этого.


Напомним, что первая часть URL-адреса, предшествующая ://, является протоколом. Это говорит браузеру, с каким протоколом этот URL предполагается использовать. Без надстройки браузера браузер поставляется только с поддержкой некоторых встроенных протоколов, таких как http, https, ws, wss, mailto и некоторых других.

Сервер http сможет отвечать только на протокол http, поэтому он будет работать только с URL-адресами, которые ожидают использовать протокол http и которые, как известно, браузер, используют протокол http. Таким образом, ваш собственный протокол, о котором браузер не знает, - это не то, с чем браузер знает, что делать. Требуется надстройка браузера, чтобы сообщить браузеру, что делать с пользовательским URL.

Когда я пытаюсь использовать этот тип URL-адреса, создается впечатление, что Chrome завершает работу, прежде чем он сможет добраться до моего HTTP-сервера в Node.

Да, это не узнаваемый протокол, встроенный в браузер, поэтому браузер не знает, что с ним делать и как произносить этот протокол.

Можно ли привязать ваш HTTP-сервер к пользовательской схеме URL, как это?

Только с надстройкой браузера, которая регистрирует и реализует поддержку пользовательского протокола URL.

...