229

我见过:

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

你看到http的第一部分叫什么?

我可以自己注册吗?

4

8 回答 8

225

带有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

于 2008-12-23T15:51:12.193 回答
57

打开记事本并将下面的代码粘贴到其中。将“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\""
于 2011-09-01T22:23:36.067 回答
40

这对于每个浏览器都是不同的,在 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。

有关windows 端的更多详细信息,请参阅MSDN 上的 About Asynchronous Pluggable Protocols 。windows SDK 中也有一个示例。

一个快速的谷歌也展示了关于 codeproject 的这篇文章: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>

强烈考虑使用 VC8 及以上编译器中包含的 strsafe 和新的安全 CRT 方法。如果您不知道我在说什么,请参阅http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx 。

于 2008-12-23T16:04:02.370 回答
19

这是已注册URI 方案的列表。每个都有一个 RFC - 一个定义它的文档,这几乎是一个标准。RFC 告诉新应用程序(例如浏览器、ftp 客户端等)的开发人员他们需要支持什么。如果您需要一个新的基础级协议,您可以使用未注册的协议。其他答案告诉你如何。请记住,您可以使用现有协议做很多事情,从而获得它们现有的实现。

于 2008-12-23T15:57:55.377 回答
4

对于大多数 Microsoft 产品(Internet Explorer、Office、“打开文件”对话框等),您可以注册一个应用程序,以便在打开具有适当前缀的 URI 时运行。这是更常见的解释的一部分——如何实现你自己的协议。

对于 Mozilla,解释在这里,Java-在这里

于 2008-12-23T16:14:35.173 回答
3

它被称为协议。唯一阻止您制定自己的协议的是您必须:

  1. 编写一个能够理解该协议的浏览器或用户代理,无论是 URL 形式还是实际数据格式
  2. 编写一个理解该协议的服务器
  3. 最好有一个协议规范,以便浏览器和服务器可以继续协同工作。

Windows 使#1 变得非常简单,在许多情况下,这就是您真正需要的。即:

将应用程序注册到 URL 协议

于 2008-12-23T15:50:36.640 回答
1

第一部分称为协议,是的,您可以注册自己的协议。在 Windows 上(我假设你正在这样做,因为 C# 标签 - 对不起 Mono 粉丝),它是通过注册表完成的

于 2008-12-23T15:50:58.090 回答
-11

您实际上不必进行任何注册。我见过很多程序,比如 emule,创建了自己的协议规范(我认为它就是这样称呼的)。在那之后,您基本上只需要在注册表中设置一些值,以了解哪些程序处理该协议。我不确定是否有任何官方的协议说明符注册表。如果您希望人们从他们的浏览器中打开您的应用程序,那么没有什么可以阻止您为自己的应用程序创建自己的协议说明符。

于 2008-12-23T15:49:08.483 回答