根据标题,使用自定义URL方案与应用程序时URL的最大长度是多少?
例如,如果我正在通过URL启动另一个应用程序,并使用以下内容传递数据:
myappscheme://some/path?data=0123456789ABCDEF
在URL被截断之前(或系统拒绝启动其他应用程序),该字符串可以有多长?
根据标题,使用自定义URL方案与应用程序时URL的最大长度是多少?
例如,如果我正在通过URL启动另一个应用程序,并使用以下内容传递数据:
myappscheme://some/path?data=0123456789ABCDEF
在URL被截断之前(或系统拒绝启动其他应用程序),该字符串可以有多长?
很遗憾,似乎找不到答案。在我查阅的任何iOS文档中都没有明确定义max len。如MSK's链接所述,URL基础url长度有限制,而不是url的绝对字符长度。因此,大约2000个字符可能是一个安全的上限。
然而,在测试中似乎没有上限。我能够在iOS上使用长度为365,535个字符的URL而没有问题。但是苹果没有要求继续支持它,因此这是“自担风险”的。然而,基于许多应用程序正在使用它来在应用程序之间传输信息,包括大量数据,苹果可能会继续支持它,因为没有理由缩短长度。
(以下是另一个问题的答案的转载,但也直接回答了这里的问题。)
在苹果平台上(iOS/iPadOS/macOS/tvOS/watchOS),URL方案的长度限制为2 GB,这是从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上,我已经测试并确认即使是超过300MB的长URL也是可以被接受的。你可以尝试使用Objective-C来使用这样一个长的URL: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;
}
上面的答案有误导作用。文档中没有明确提到,但路径和文件名确实有长度限制。
您可以在这里看到文件路径或名称可以占用的长度限制。您可以在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)
我创建了一个简单的项目来测试长度限制,目前看来即使是1MB也没有问题。但显然不能依赖这个数字来预测未来。
参考 http://en.wikipedia.org/wiki/URI_scheme :
方案名由以字母开头并后跟任意组合的字母、数字、加号(“+”)、句点(“.”)或连字符(“-”)的字符序列组成。虽然方案不区分大小写,但规范形式是小写的,并且指定方案的文档必须使用小写字母来指定。方案名后面跟着一个冒号(“:”)。
没有关于长度的内容。