自定义URL方案最大URL长度

时间:2012-07-18 16:59:16

标签: ios custom-url

根据标题,在将自定义网址方案与应用程序一起使用时,网址的最大长度是多少?

e.g。如果我通过URL启动另一个应用程序,并使用类似

的方式传递一个数据块

myappscheme://一些/路径数据= 0123456789ABCDEF

在URL被切断之前该字符串可以获得多长时间(或者系统拒绝启动其他应用程序)?

5 个答案:

答案 0 :(得分:22)

不幸的是,答案似乎不可用。我可以找到的任何iOS文档中都没有具体定义max len。

如上所述,MSK的链接有限制URL基本网址长度,而不是网址的绝对字符串长度。所以这可能是最大的安全赌注,大约2000个字符。

然而,在测试中似乎没有上限。我能够在iOS上使用365,535个字符网址,没有任何问题。但苹果没有要求继续支持它,所以这是“使用风险”。然而,我会说,基于这样一个事实,许多应用程序正在使用它来传输信息,包括应用程序之间的大量数据,Apple可能会继续支持它,因为似乎没有理由减少长度

答案 1 :(得分:4)

上述答案具有误导性。文档并没有真正提及它,但路径和文件名确实有长度限制。

您可以在此处看到文件路径或名称占用的长度有限制。您可以在syslimits.h

中查看这些内容
#define NAME_MAX          255   /* max bytes in a file name */
#define PATH_MAX         1024   /* max bytes in pathname */

你可以记录它们并亲眼看看:

NSLog(@"PATH MAX VALUE: %i", PATH_MAX)

路径限制为1024字节或UTF-8中的1024个字符。 路径中的文件名限制为255字节或UTF-8中的255个字符。

我遇到了这个问题,试图处理编码日文字符的文件(显着延长了URL /名称)。我唯一的解决方案是立即裁剪名称。

你可以在这个苹果支持页面上看到他们谈论一些语言(如韩国语或日语)如何占用更多字节并导致问题的字符(它们实际上并没有提供解决问题的好方法)虽然):

https://support.apple.com/en-is/HT202808

答案 2 :(得分:2)

我创建了a simple project to measure the limit,目前似乎即使是高达兆字节也是如此。明显地依靠这个数字是不明智的。

答案 3 :(得分:1)

(以下是来自another question's answer的转发,但也直接在此处回答了该问题。)

在Apple平台(iOS / iPadOS / macOS / tvOS / watchOS)上,该限制为 2 GB 长URL方案,如this comment in the source code of Swift所示:

  
// Make sure the URL string isn't too long.
// We're limiting it to 2GB for backwards compatibility with 32-bit executables using NS/CFURL
if ( (urlStringLength > 0) && (urlStringLength <= INT_MAX) )
{
...

在iOS上,我已经测试并确认甚至可以接受300+ MB长的URL。您可以在Objective-C中尝试这样长的网址:

NSString *path = [@"a:" stringByPaddingToLength:314572800 withString:@"a" startingAtIndex:0];
NSString *js = [NSString stringWithFormat:@"window.location.href = \"%@\";", path];
[self.webView stringByEvaluatingJavaScriptFromString:js];

并捕获是否成功:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"length: %@", @(request.URL.absoluteString.length));
    return YES;
}

答案 4 :(得分:0)

参考http://en.wikipedia.org/wiki/URI_scheme

  

方案名称由一系列以字母开头的字符组成,后跟字母,数字,加号(“+”),句号(“。”)或连字符(“ - ”)的任意组合。虽然方案不区分大小写,但规范形式是小写的,指定方案的文档必须使用小写字母。接下来是冒号(“:”)。

没有任何关于长度的信息。