Я видел:
http://www...ftp://blah.blah...file://blah.blah...unreal://blah.blah...mailto://blah.blah...Как называется тот первый раздел, в котором вы видите http и тому подобное?
Могу ли я зарегистрировать свой?
Есть два типа протоколов, но я не знаю, какой термин использовать для их различения. Протоколы «файл» и «mailto» обрабатываются в клиенте. Протоколы «http» и «ftp» обрабатываются на сервере. Сначала меня смущали ответы на протоколы, обрабатываемые в браузере, когда мне нужно что-то, что обрабатывается на сервере.





Вам действительно не нужно регистрироваться как таковой. Я видел много программ, таких как emule, которые создавали свои собственные специфичные для протокола (я думаю, так это называется). После этого вам просто нужно установить некоторые значения в реестре относительно того, какая программа обрабатывает этот протокол. Я не уверен, есть ли какой-либо официальный реестр спецификаторов протоколов. На самом деле нет ничего, что могло бы помешать вам создать свой собственный спецификатор протокола для вашего собственного приложения, если вы хотите, чтобы люди открывали ваше приложение из своего браузера.
-1: вводит в заблуждение, использует неточную номенклатуру и не дает реальной ценности
Это называется протоколом. Единственное, что мешает вам создать собственный протокол, это то, что вам необходимо:
Windows делает №1 действительно простым, и во многих случаях это все, что вам действительно нужно. Визуализация:
Первый раздел называется протоколом, и да, вы можете зарегистрировать свой собственный. В 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?
«А как насчет операционных систем, отличных от Windows?» Это зависит от приложения. Я думаю, что на самом деле это тоже часто зависит от приложения в Windows (это не заставит все волшебным образом работать).
Определите все. Запись в реестре указывает Windows передать Uri с этим протоколом указанному приложению, все остальное должно обрабатываться самим приложением.
Подключаемый обработчик протокола - определенно лучший выбор.
(Default) здесь означает пустую строку. Не воспринимайте это буквально.
Включает ли это протоколы, такие как «http» и «ftp», которые обрабатываются на сервере? Если это так, то важная часть - как написать исполняемый файл.
@ user34660 «http» и «ftp» уже имеют довольно хорошие исполняемые файлы для обработки этих схем. Google Chrome - хороший пример программы, которая с ними справится.
@Hicsy Я сказал "нравится" http и ftp, но я не имел в виду их конкретно. Я имел в виду, что существует два типа протоколов. Протокол mailto обрабатывается только клиентом, тогда как http и ftp отправляются на сервер и обратно. Люди, кажется, относятся к ним как к одному и тому же, но я сомневаюсь, что если бы мы хотели добавить (как в развивать) протокол, который идет от клиента к серверу, нам нужно только добавить запись в реестр в клиенте без какого-либо кода или чего-то еще. на сервере.
@ user34660 Что касается Windows, то это одно и то же. http связан в Windows с локальной программой, а именно с веб-браузером. Это веб-браузер, который обрабатывает фактический исходящий запрос с использованием спецификации http. Все, что делает обработчик, это сообщает окнам: «Эта программа знает, что делать с URI этого типа». То же самое, говорим ли мы о http://, mailto://, tel:// или, я не знаю, о fish://.
@KalZekdor Нет. См. RFC 6068 - Схема URI mailto; слово сервер появляется дважды, один раз со ссылкой на http и снова говоря, что mailto необычен, потому что не вызывает немедленного взаимодействия с сервером. В стандарте ничего не происходит на стороне сервера. Также см. Протокол передачи гипертекста - HTTP (здесь не самый последний, но полезный); слово сервер встречается более 600 раз. Для http есть серверная часть. Для большинства протоколов требуется серверное программное обеспечение, которое здесь не описывается.
@ user34660 Вы путаете "схемы" и "обработчики". Существует спецификация схемы URI mailto:, но она имеет отношение ничего такого к регистрации обработчика URI схемы mailto:. ОС просто все равно, все это делает программа, которая обрабатывает схему. Windows обрабатывает все URI точно так же, по крайней мере, насколько мне известно, она передает URI в качестве аргумента в указанную программу-обработчик.
вот автономный пример / решение: gist.github.com/aleksey-bykov/d7d2bc61adf2da519f6844db87e023 fa
Вот список зарегистрированных Схемы URI. У каждого есть RFC - документ, определяющий его, что является почти стандартом. RFC сообщает разработчикам новых приложений (таких как браузеры, ftp-клиенты и т. д.), Что им необходимо поддерживать. Если вам нужен новый протокол базового уровня, вы можете использовать незарегистрированный. Другие ответы расскажут, как это сделать. Имейте в виду, что с существующими протоколами можно многое делать, получая, таким образом, их существующие реализации.
Несмотря на технические детали того, как заставить протокол работать в Windows - это самый важный ответ. Вам не следует создавать новую схему URI, если она не зарегистрирована в IETF или не использует экспериментальное пространство имен (например, префикс X-).
Это отличается для каждого браузера, в IE и Windows вам нужно создать то, что они называют подключаемым обработчиком протокола.
Основные шаги следующие:
См. Об асинхронных подключаемых протоколах в 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, если вы не понимаете, о чем я говорю.
Это просто пример того, что побуждает пользователей щелкнуть по нему.
пожалуйста, объясните это: «потому что для того, чтобы сделать это надежно, вы не можете сделать это в управляемом коде и должны делать это на C++»
Это из периода времени выполнения .Net 2.0 (обратите внимание, это включало 3.0 и 3.5). Он не поддерживал разные среды выполнения CLR в одном и том же процессе, поэтому, если бы я написал обработчик 1.0, а вы написали обработчик 2.0, и оба наших продукта были бы установлены на компьютере клиента, вместе мы обеспечили бы сбой браузера каждый раз. он запущен. Среда выполнения 4.0 пыталась решить эту проблему, но, насколько я помню, все еще были пограничные случаи, о которых нужно было беспокоиться. Но суть в том, что использование объектов .Net для подключаемых модулей в собственных процессах должно было быть полностью исключено до 4.0, и, возможно, по-прежнему есть крайние случаи, о которых нужно беспокоиться.
Для большинства продуктов Microsoft (Internet Explorer, Office, диалоговые окна «открыть файл» и т. д.) Вы можете запустить зарегистрировать приложение при открытии URI с соответствующим префиксом. Это часть более распространенного объяснение - как реализовать свой собственный протокол.
Откройте блокнот и вставьте в него приведенный ниже код. Измените «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, вызывать файлы .reg из (интернет) проводника - не лучшая идея. Вы можете использовать команду start для выполнения reg-файла, например «start yourregfile.reg», но вы получите сообщение от операционной системы, чтобы обязательно добавить его в реестр. Для этого пользователь должен иметь права администратора.
Собственно я и задаю этот вопрос stackoverflow.com/questions/24265292/….
% 1% 2 и т. д. В файле reg являются аргументом (ами) для вашего приложения. Итак, если вы сделаете YourApp.exe "своим аргументом", значит% 1 == "ваш аргумент"
посмотрите вопрос, я добавил образ реестра. Я спрашиваю об URL-адресе, который я должен ввести в проводнике вместе с именем файла в качестве аргумента.
Привет, @Erwinus. Интересно, является ли эта строчка @ = "URL:YourApp Protocol" необязательной? У меня проблема в IE 11 на Win 7 SP1, в которой проблема с моим настраиваемым протоколом URL, где он отлично работает в любой другой версии браузера + Windows.
YourApp Protocol - это имя вашего протокола. Например: Протокол SwDev. «Протокол URL» - это имя протокола, например: swdev. Так что вы можете, например, сделать: swdev: // что угодно. Если есть проблема с IE, это может быть вызвано локальными настройками интернет-безопасности, потому что вы используете неизвестное имя протокола, а не имя протокола по умолчанию.
Вопрос @Erwinus Imp несложно понять: P
@imp В Google Chrome параметры анализируются следующим образом: protocol: "param1 param2". Я надеюсь, что это поможет кому-то. В противном случае из моих тестов кажется, что весь URL-адрес будет передан как параметр 1. Затем вам нужно использовать программу для его анализа. Так же и магнитные ссылки работают с BT.
Включает ли это протоколы, такие как «http» и «ftp», которые обрабатываются на сервере? Если это так, то важная часть - как написать исполняемый файл.
@ user34660: Ну, попробуй и поделись здесь. Я предполагаю, что они уже приняты IE, и я думаю, что вы получите некоторые предупреждения безопасности.
@Erwinus, когда я сказал такие как "http" и "ftp", я имел в виду нравиться, но не конкретно. Некоторые протоколы обрабатываются на сервере, а некоторые - на клиенте. Люди говорят об одном и том же.
@ user34660: Это может быть что угодно. Например, itunes: // myapp, как itunes использует при установке. Я не использую itunes (ненавижу это), но могу вспомнить, что было что-то вроде того, чтобы связать библиотеку онлайн-приложений с itunes, установленной на вашем компьютере. Когда Apple проверяет этот протокол с помощью javascript, они могут определить, что itunes установлен. Вот почему веб-страница, которая полностью отделена от системы, может решить предоставить вам ссылку на приложение или ссылку для установки itunes.
@imp, чтобы получить желаемый эффект, вам просто нужно создать файл в этом посте и немного его настроить. после того, как вы запустите .reg fileодин раз, он скажет системе использовать ваше приложение при вводе этого протокола. Повторюсь, вам нужно запустить этот код только один раз для каждой системы, чтобы зарегистрировать приложение в протоколе.
имеет значение только% 1, нет возможности указать в URL% 2 и% 3 и т. д.
вот автономный пример / решение: gist.github.com/aleksey-bykov/d7d2bc61adf2da519f6844db87e023 fa
здесь вызывается написать следующий текст в URL-адресе исследования в Интернете YourApp: "testParm" YourApp - это схема URL-адреса, которую вы определили. Параметр "testParm" может быть одним из многих
Правильное название - «схема» (см. RFC 2616 и 2396). Даже если многие схемы URL названы в честь протоколов, это не означает, что единственный способ получить доступ к ресурсу - через протокол.