Максимальная длина URL-адреса пользовательской схемы URL-адресов

Согласно заголовку, какой максимальной длины может быть URL-адрес при использовании настраиваемой схемы URL-адресов с приложением?

например Если я запускаю другое приложение через URL-адрес и передаю блок данных, используя что-то вроде

myappscheme://some/path?data=0123456789ABCDEF

как долго эта строка может длиться до того, как URL-адрес будет отключен (или система вообще откажется запускать другое приложение)?


person Shaggy Frog    schedule 18.07.2012    source источник
comment
де-факто ограничение в 2000 символов   -  person msk    schedule 18.07.2012
comment
@MSK (1) это другой вопрос о длине части scheme; Я спрашиваю обо всем URL-адресе (2), когда вы говорите де-факто, какой у вас источник?   -  person Shaggy Frog    schedule 19.07.2012
comment
проверьте ответ на этот вопрос stackoverflow.com/questions/417142/   -  person msk    schedule 19.07.2012
comment
@MSK Я говорю об ограничении на iOS для пользовательских схем URL. Не в общем смысле, с веб-браузерами. Это ответ на другой вопрос.   -  person Shaggy Frog    schedule 20.07.2012


Ответы (5)


К сожалению, ответ, похоже, недоступен. Максимальная длина не определена конкретно ни в одной документации iOS, которую я смог найти.

Существуют ограничения, как указано выше по ссылке MSK, для длины базового URL-адреса, а не для абсолютной длины строки URL-адреса. Так что это, вероятно, безопасная ставка для максимума, около 2000 символов.

Однако при тестировании оказалось, что верхнего предела нет. Я без проблем смог использовать 365 535 символов URL на iOS. Но Apple не обязана продолжать его поддержку, так что это «использование на свой страх и риск». Однако я бы сказал, что, основываясь на том факте, что многие приложения используют это для передачи информации, включая большие объемы данных между приложениями, Apple, вероятно, продолжит поддерживать его, поскольку, похоже, нет причин для уменьшения длины .

person nycynik    schedule 03.01.2013
comment
Я по-прежнему могу отправлять URL-адреса с более чем 10 000 000 символов (iOS 13). - person Nominalista; 04.11.2019
comment
@Nominalista Боже, мне правда интересно, что ты делаешь о_О - person zaitsman; 12.03.2021

(Ниже приведен репост из ответа на другой вопрос, но он также напрямую отвечает на вопрос здесь.)< /под>

На платформах Apple (iOS/iPadOS/macOS/tvOS/watchOS) ограничение составляет 2 ГБ длинная схема URL, как видно из этот комментарий в исходном коде 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 я проверил и подтвердил, что принимается даже URL-адрес длиной более 300 МБ. Вы можете попробовать такой длинный 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;
}
person Cœur    schedule 15.11.2019
comment
@DustinKerstein Нет. Не стесняйтесь попробовать и опубликовать ответ. - person Cœur; 06.09.2020

Ответы выше вводят в заблуждение. Документы на самом деле не упоминают об этом, но пути и имена файлов имеют ограничения по длине.

Здесь вы можете видеть, что существует ограничение на длину пути или имени файла. Вы можете проверить это в 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 байтами или 1024 символами в UTF-8. Имена файлов в путях ограничены 255 байтами или 255 символами в кодировке UTF-8.

Я столкнулся с этой проблемой, пытаясь справиться с файлами, закодированными японскими символами (которые значительно удлиняют URL-адрес/имена). Мое единственное решение - обрезать имя прямо сейчас.

Вы можете увидеть здесь, на этой странице поддержки Apple, что они говорят о том, что некоторые языки (например, корейский или японский) имеют символы, которые занимают больше байтов и вызывают проблемы (хотя на самом деле они не обеспечивают хороший способ решения проблемы):

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

person yvanscher    schedule 25.08.2015
comment
Это полезная информация об ограничениях длины имен файлов и путей к файлам. Но знаем ли мы, что это влияет на URL-адреса? Многие URL-адреса не относятся к локальным файлам. И даже URL-адреса, которые ссылаются на локальные файлы, могут обрабатываться API-интерфейсами, на которые распространяются другие ограничения, чем на API-интерфейсы для прямого манипулирования ролями через имена файлов и пути. - person algal; 24.07.2016
comment
@algal, насколько я понимаю, URL-адрес означает «Унифицированный указатель ресурсов». Ресурсы, о которых здесь идет речь, представляют собой файлы, поскольку вы используете URL-адрес в среде ОС, и он находит файлы, поэтому понятно, что ограничения на пути к файлам также будут применяться к длинам URL-адресов. Хотя я могу ошибаться в этом. - person yvanscher; 10.09.2017

Я создал простой проект для измерения лимита, на данный момент кажется, что даже колоссальный мегабайт в порядке. Очевидно, было бы неразумно полагаться на это число в будущем.

person zoul    schedule 07.12.2017
comment
Более чем за год до вашего ответа я уже продемонстрировал, что колоссальные 300 мегабайт тоже подходят, а позже я обнаружил, что верхний предел должен составлять 2 ГБ. ;) - person Cœur; 15.11.2019

Ссылка http://en.wikipedia.org/wiki/URI_scheme:

Имя схемы состоит из последовательности символов, начинающейся с буквы, за которой следует любая комбинация букв, цифр, плюс ("+"), точка (".") или дефис ("-"). Хотя схемы не чувствительны к регистру, каноническая форма написана строчными буквами, и документы, определяющие схемы, должны быть строчными буквами. За ним следует двоеточие (":").

Про длину ничего нет.

person miaodadao    schedule 14.01.2013