Как мне создать свой собственный протокол URL? (например, так: // ...)

Я видел:

  • http://www...
  • ftp://blah.blah...
  • file://blah.blah...
  • unreal://blah.blah...
  • mailto://blah.blah...

Как называется тот первый раздел, в котором вы видите http и тому подобное?

Могу ли я зарегистрировать свой?

Правильное название - «схема» (см. RFC 2616 и 2396). Даже если многие схемы URL названы в честь протоколов, это не означает, что единственный способ получить доступ к ресурсу - через протокол.

Marek 09.11.2010 14:48

Есть два типа протоколов, но я не знаю, какой термин использовать для их различения. Протоколы «файл» и «mailto» обрабатываются в клиенте. Протоколы «http» и «ftp» обрабатываются на сервере. Сначала меня смущали ответы на протоколы, обрабатываемые в браузере, когда мне нужно что-то, что обрабатывается на сервере.

user34660 06.04.2017 00:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
218
2
135 890
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Вам действительно не нужно регистрироваться как таковой. Я видел много программ, таких как emule, которые создавали свои собственные специфичные для протокола (я думаю, так это называется). После этого вам просто нужно установить некоторые значения в реестре относительно того, какая программа обрабатывает этот протокол. Я не уверен, есть ли какой-либо официальный реестр спецификаторов протоколов. На самом деле нет ничего, что могло бы помешать вам создать свой собственный спецификатор протокола для вашего собственного приложения, если вы хотите, чтобы люди открывали ваше приложение из своего браузера.

-1: вводит в заблуждение, использует неточную номенклатуру и не дает реальной ценности

Marek 09.11.2010 14:44

Это называется протоколом. Единственное, что мешает вам создать собственный протокол, это то, что вам необходимо:

  1. Напишите какой-нибудь браузер или пользовательский агент, который понимает этот протокол как в форме URL, так и в фактическом формате данных.
  2. Напишите сервер, который понимает этот протокол
  3. Желательно иметь спецификацию протокола, чтобы браузер и сервер могли продолжать работать вместе.

Windows делает №1 действительно простым, и во многих случаях это все, что вам действительно нужно. Визуализация:

Регистрация приложения в протоколе URL

Первый раздел называется протоколом, и да, вы можете зарегистрировать свой собственный. В Windows (где я предполагаю, что вы делаете это с учетом тега C# - извините, поклонники Mono), это сделано через реестр.

Ответ принят как подходящий

Часть с HTTP://, FTP:// и т. д. Называется Схемы URI.

Вы можете зарегистрировать свой через реестр.

HKEY_CLASSES_ROOT/
  your-protocol-name/
    (Default)    "URL:your-protocol-name Protocol"
    URL Protocol ""
    shell/
      open/
        command/
          (Default) PathToExecutable

Источники: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml, http://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx

А как насчет операционных систем, отличных от Windows?

Bdoserror 23.12.2008 20:04

«А как насчет операционных систем, отличных от Windows?» Это зависит от приложения. Я думаю, что на самом деле это тоже часто зависит от приложения в Windows (это не заставит все волшебным образом работать).

Calum 23.12.2008 20:19

Определите все. Запись в реестре указывает Windows передать Uri с этим протоколом указанному приложению, все остальное должно обрабатываться самим приложением.

James Gregory 23.12.2008 22:32

Подключаемый обработчик протокола - определенно лучший выбор.

Miriam 01.12.2009 20:17
(Default) здесь означает пустую строку. Не воспринимайте это буквально.
deerchao 05.04.2013 13:02

Включает ли это протоколы, такие как «http» и «ftp», которые обрабатываются на сервере? Если это так, то важная часть - как написать исполняемый файл.

user34660 06.04.2017 00:16

@ user34660 «http» и «ftp» уже имеют довольно хорошие исполняемые файлы для обработки этих схем. Google Chrome - хороший пример программы, которая с ними справится.

Hicsy 15.09.2017 04:12

@Hicsy Я сказал "нравится" http и ftp, но я не имел в виду их конкретно. Я имел в виду, что существует два типа протоколов. Протокол mailto обрабатывается только клиентом, тогда как http и ftp отправляются на сервер и обратно. Люди, кажется, относятся к ним как к одному и тому же, но я сомневаюсь, что если бы мы хотели добавить (как в развивать) протокол, который идет от клиента к серверу, нам нужно только добавить запись в реестр в клиенте без какого-либо кода или чего-то еще. на сервере.

user34660 17.09.2017 01:31

@ user34660 Что касается Windows, то это одно и то же. http связан в Windows с локальной программой, а именно с веб-браузером. Это веб-браузер, который обрабатывает фактический исходящий запрос с использованием спецификации http. Все, что делает обработчик, это сообщает окнам: «Эта программа знает, что делать с URI этого типа». То же самое, говорим ли мы о http://, mailto://, tel:// или, я не знаю, о fish://.

Kal Zekdor 16.03.2018 03:12

@KalZekdor Нет. См. RFC 6068 - Схема URI mailto; слово сервер появляется дважды, один раз со ссылкой на http и снова говоря, что mailto необычен, потому что не вызывает немедленного взаимодействия с сервером. В стандарте ничего не происходит на стороне сервера. Также см. Протокол передачи гипертекста - HTTP (здесь не самый последний, но полезный); слово сервер встречается более 600 раз. Для http есть серверная часть. Для большинства протоколов требуется серверное программное обеспечение, которое здесь не описывается.

user34660 16.03.2018 10:24

@ user34660 Вы путаете "схемы" и "обработчики". Существует спецификация схемы URI mailto:, но она имеет отношение ничего такого к регистрации обработчика URI схемы mailto:. ОС просто все равно, все это делает программа, которая обрабатывает схему. Windows обрабатывает все URI точно так же, по крайней мере, насколько мне известно, она передает URI в качестве аргумента в указанную программу-обработчик.

Kal Zekdor 17.03.2018 01:55

вот автономный пример / решение: gist.github.com/aleksey-bykov/d7d2bc61adf2da519f6844db87e023‌ fa

Trident D'Gao 12.05.2018 02:59

Вот список зарегистрированных Схемы URI. У каждого есть RFC - документ, определяющий его, что является почти стандартом. RFC сообщает разработчикам новых приложений (таких как браузеры, ftp-клиенты и т. д.), Что им необходимо поддерживать. Если вам нужен новый протокол базового уровня, вы можете использовать незарегистрированный. Другие ответы расскажут, как это сделать. Имейте в виду, что с существующими протоколами можно многое делать, получая, таким образом, их существующие реализации.

Несмотря на технические детали того, как заставить протокол работать в Windows - это самый важный ответ. Вам не следует создавать новую схему URI, если она не зарегистрирована в IETF или не использует экспериментальное пространство имен (например, префикс X-).

Alnitak 23.12.2008 19:09

Это отличается для каждого браузера, в IE и Windows вам нужно создать то, что они называют подключаемым обработчиком протокола.

Основные шаги следующие:

  1. Реализуйте интерфейс IInternetProtocol.
  2. Реализуйте интерфейс IInternetProtocolRoot.
  3. Реализуйте интерфейс IClassFactory.
  4. По желанию. Реализуйте интерфейс IInternetProtocolInfo. Обработчик транзакций обеспечивает поддержку протокола HTTP.
  5. Если реализован IInternetProtocolInfo, обеспечьте поддержку PARSE_SECURITY_URL и PARSE_SECURITY_DOMAIN, чтобы диспетчер зоны безопасности URL мог правильно управлять безопасностью. Напишите код для вашего обработчика протокола.
  6. Обеспечьте поддержку BINDF_NO_UI и BINDF_SILENTOPERATION.
  7. Добавьте подраздел для обработчика протокола в реестр в разделе HKEY_CLASSES_ROOT \ PROTOCOLS \ Handler.
  8. Создайте строковое значение CLSID под подразделом и задайте для строки значение CLSID вашего обработчика протокола.

См. Об асинхронных подключаемых протоколах в MSDN для получения более подробной информации о окнах. Также есть образец в Windows SDK.

Быстрый поиск в Google также показал эту статью о кодовом проекте: http://www.codeproject.com/KB/IP/DataProtocol.aspx.

Наконец, как специалист по безопасности, я должен отметить, что этот код должен быть усилен в боевых условиях. Это связано с большим риском, потому что для того, чтобы сделать это надежно, вы не можете сделать это в управляемом коде и должны делать это на C++ (я полагаю, вы могли бы использовать VB6). Вы должны подумать, действительно ли вам это нужно, и если да, тщательно спроектируйте и закодируйте безопасно. Злоумышленник может легко контролировать передаваемый вам контент, просто добавив ссылку на страницу. Например, если у вас простое переполнение буфера, лучше не делать этого: <a href = "custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>

Обязательно подумайте об использовании strsafe и новых безопасных методов CRT, включенных в компиляторы VC8 и выше. См. http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx, если вы не понимаете, о чем я говорю.

Это просто пример того, что побуждает пользователей щелкнуть по нему.

Peter Oehlert 23.12.2008 23:19

пожалуйста, объясните это: «потому что для того, чтобы сделать это надежно, вы не можете сделать это в управляемом коде и должны делать это на C++»

LogicDaemon 23.04.2015 09:26

Это из периода времени выполнения .Net 2.0 (обратите внимание, это включало 3.0 и 3.5). Он не поддерживал разные среды выполнения CLR в одном и том же процессе, поэтому, если бы я написал обработчик 1.0, а вы написали обработчик 2.0, и оба наших продукта были бы установлены на компьютере клиента, вместе мы обеспечили бы сбой браузера каждый раз. он запущен. Среда выполнения 4.0 пыталась решить эту проблему, но, насколько я помню, все еще были пограничные случаи, о которых нужно было беспокоиться. Но суть в том, что использование объектов .Net для подключаемых модулей в собственных процессах должно было быть полностью исключено до 4.0, и, возможно, по-прежнему есть крайние случаи, о которых нужно беспокоиться.

Peter Oehlert 23.04.2015 16:21

Для большинства продуктов Microsoft (Internet Explorer, Office, диалоговые окна «открыть файл» и т. д.) Вы можете запустить зарегистрировать приложение при открытии URI с соответствующим префиксом. Это часть более распространенного объяснение - как реализовать свой собственный протокол.

Для Mozilla объяснение - здесь, Java - здесь.

Откройте блокнот и вставьте в него приведенный ниже код. Измените «YourApp» на имя вашего приложения. Сохраните его в YourApp.reg и запустите, щелкнув по нему в проводнике. Это оно! Ваше здоровье! Эрвин Хантьес

REGEDIT4

[HKEY_CLASSES_ROOT\YourApp]
@ = "URL:YourApp Protocol"
"URL Protocol" = ""

[HKEY_CLASSES_ROOT\YourApp\DefaultIcon]
@ = "\"C:\\Program Files\\YourApp\\YourApp.exe\""

[HKEY_CLASSES_ROOT\YourApp\shell]

[HKEY_CLASSES_ROOT\YourApp\shell\open]

[HKEY_CLASSES_ROOT\YourApp\shell\open\command]
@ = "\"C:\\Program Files\\YourApp\\YourApp.exe\" \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\" \"%9\""

как вызвать из проводника, какой URL

imp 17.06.2014 14:27

@imp, вызывать файлы .reg из (интернет) проводника - не лучшая идея. Вы можете использовать команду start для выполнения reg-файла, например «start yourregfile.reg», но вы получите сообщение от операционной системы, чтобы обязательно добавить его в реестр. Для этого пользователь должен иметь права администратора.

Codebeat 18.06.2014 05:05

Собственно я и задаю этот вопрос stackoverflow.com/questions/24265292/….

imp 18.06.2014 09:41

% 1% 2 и т. д. В файле reg являются аргументом (ами) для вашего приложения. Итак, если вы сделаете YourApp.exe "своим аргументом", значит% 1 == "ваш аргумент"

Codebeat 18.06.2014 09:45

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

imp 18.06.2014 09:52

Привет, @Erwinus. Интересно, является ли эта строчка @ = "URL:YourApp Protocol" необязательной? У меня проблема в IE 11 на Win 7 SP1, в которой проблема с моим настраиваемым протоколом URL, где он отлично работает в любой другой версии браузера + Windows.

swdev 07.07.2014 03:01

YourApp Protocol - это имя вашего протокола. Например: Протокол SwDev. «Протокол URL» - это имя протокола, например: swdev. Так что вы можете, например, сделать: swdev: // что угодно. Если есть проблема с IE, это может быть вызвано локальными настройками интернет-безопасности, потому что вы используете неизвестное имя протокола, а не имя протокола по умолчанию.

Codebeat 08.07.2014 03:17

Вопрос @Erwinus Imp несложно понять: P

iautomation 13.09.2015 13:33

@imp В Google Chrome параметры анализируются следующим образом: protocol: "param1 param2". Я надеюсь, что это поможет кому-то. В противном случае из моих тестов кажется, что весь URL-адрес будет передан как параметр 1. Затем вам нужно использовать программу для его анализа. Так же и магнитные ссылки работают с BT.

iautomation 13.09.2015 17:06

Включает ли это протоколы, такие как «http» и «ftp», которые обрабатываются на сервере? Если это так, то важная часть - как написать исполняемый файл.

user34660 06.04.2017 00:20

@ user34660: Ну, попробуй и поделись здесь. Я предполагаю, что они уже приняты IE, и я думаю, что вы получите некоторые предупреждения безопасности.

Codebeat 06.04.2017 15:14

@Erwinus, когда я сказал такие как "http" и "ftp", я имел в виду нравиться, но не конкретно. Некоторые протоколы обрабатываются на сервере, а некоторые - на клиенте. Люди говорят об одном и том же.

user34660 06.04.2017 20:20

@ user34660: Это может быть что угодно. Например, itunes: // myapp, как itunes использует при установке. Я не использую itunes (ненавижу это), но могу вспомнить, что было что-то вроде того, чтобы связать библиотеку онлайн-приложений с itunes, установленной на вашем компьютере. Когда Apple проверяет этот протокол с помощью javascript, они могут определить, что itunes установлен. Вот почему веб-страница, которая полностью отделена от системы, может решить предоставить вам ссылку на приложение или ссылку для установки itunes.

Codebeat 07.04.2017 01:57

@imp, чтобы получить желаемый эффект, вам просто нужно создать файл в этом посте и немного его настроить. после того, как вы запустите .reg fileодин раз, он скажет системе использовать ваше приложение при вводе этого протокола. Повторюсь, вам нужно запустить этот код только один раз для каждой системы, чтобы зарегистрировать приложение в протоколе.

Garet Claborn 19.05.2017 08:42

имеет значение только% 1, нет возможности указать в URL% 2 и% 3 и т. д.

Trident D'Gao 12.05.2018 01:46

вот автономный пример / решение: gist.github.com/aleksey-bykov/d7d2bc61adf2da519f6844db87e023‌ fa

Trident D'Gao 12.05.2018 02:59

здесь вызывается написать следующий текст в URL-адресе исследования в Интернете YourApp: "testParm" YourApp - это схема URL-адреса, которую вы определили. Параметр "testParm" может быть одним из многих

Haseeb 23.01.2019 11:40
gist.github.com/aleksey-bykov/d7d2bc61adf2da519f6844db87e023‌ fa не работает - есть ли у кого-нибудь полный автономный пример URL-адреса и настраиваемый обработчик протоколов, в котором используется не весь URI, а один параметр? У меня есть следующее: a.exe xxx param1 yyy, который я хочу выполнить через mycust: // param1 или аналогичный. Заранее спасибо!
J S 16.02.2020 13:25

Другие вопросы по теме