1

是否有一种干净且符合规范的方法来定义自定义 URL 方案,该方案充当另一个 URL 返回的资源的适配器?

我已经定义了一个自定义 URL 协议,它返回本地文件的解密表示。因此,例如,在我的代码中,

decrypted-file:///path/to/file

透明地解密您将从file:///path/to/file. 但是,这仅适用于本地文件。没有什么好玩的!我希望 URL 规范允许一种简洁的方式,我可以通过将新的 URL 方案定义为现有 URL 上的一种适配器来概括这一点。

例如,我是否可以改为定义一个自定义 URL 方案decrypted:,该方案可用作适配器,为检索资源的另一个绝对 URL 加前缀?然后我可以做

decrypted:file:///path/to/file

decrypted:http://server/path/to/filedecrypted:ftp://server/path/to/file或什么的。这将使我的decrypted:协议可以与所有现有的进行文件检索的 URL 方案组合。

Java 对 URL 方案做了类似的事情,jar:但从我对RFC 3986的阅读来看,这种 Java 技术似​​乎违反了 URL 规范。嵌入的 URL 未正确进行字节编码,因此嵌入 URL 中的任何/?#分隔符都应正式视为嵌入 URL 中的段分隔符(即使JarURLConnection不是这样做的)。我想保持在规格范围内。

有没有一种很好正确的方法来做到这一点?或者是对整个嵌入式 URL 进行字节编码的唯一选择(即,decrypted:file%3A%2F%2F%2Fpath%2Fto%2Ffile不太好)?

我建议的(URL 适配器)是在其他任何地方完成的吗?还是有更深层次的原因导致这是被误导的?

4

1 回答 1

0

Cocoa 中没有内置适配器,但是使用 NSURLProtocol 编写自己的适配器对于大多数用途来说非常简单。给定一个任意 URL,像这样对其进行编码似乎最简单:

myscheme:<originalurl>

例如:

myscheme:http://example.com/path

在最简单的情况下,NSURL 只关心你传入的字符串是否是一个有效的 URI,如上所示。是的,基于 RFC 1808 等,顶部有额外的 URL 支持,但这不是必需的。

一个有效的 URI 只需要一个冒号来指示方案,并且没有无效字符(基本上是没有空格的 ASCII)。

然后,您可以使用该-resourceSpecifier方法检索原始 URL 并使用它。

于 2013-12-28T12:24:56.730 回答