NSURLComponents componentsWithString - Правило - PullRequest
0 голосов
/ 06 февраля 2019

Я пишу модульные тесты для проверки класса генератора URL.

Я использую NSURLComponents componentsWithString] для создания окончательного объекта URL.

Существует ли правило относительно того, как componentsWithString избегает косой черты (/)?

Случай 1:

NSURLComponents *urlComponents = [NSURLComponents componentsWithString: @"/foo"];
urlComponents.scheme = @"http";
urlComponents.host = [NSString stringWithFormat:@"www.bar.com"];
// [urlComponents URL] = http://www.bar.com/foo - Seems okay

Случай2:

NSURLComponents *urlComponents = [NSURLComponents componentsWithString: @"////foo"];
urlComponents.scheme = @"http";
urlComponents.host = [NSString stringWithFormat:@"www.bar.com"];
// [urlComponents URL] = http://www.bar.com//foo

Случай 3:

NSURLComponents *urlComponents = [NSURLComponents componentsWithString: @"//////foo"];
urlComponents.scheme = @"http";
urlComponents.host = [NSString stringWithFormat:@"www.bar.com"];
// [urlComponents URL] = http://www.bar.com////foo

Почему в случае 2 и 3 количество косых черт уменьшается до 2 и 4 соответственно?

1 Ответ

0 голосов
/ 09 февраля 2019

Ваши случаи 2 и 3 не соответствуют формату пути RFC 3986, как указано в документации NSURLComponents: https://developer.apple.com/documentation/foundation/nsurlcomponents?language=objc

Класс NSURLComponents - это класс, предназначенный для анализа URL-адресов на основеRFC 3986 и для создания URL-адресов из их составных частей.

Из раздела пути: https://tools.ietf.org/html/rfc3986#section-3.3 спецификации RFC 3986 говорится, что ваш путь не может начинаться с //, если толькоесть компонент полномочий:

Если URI не содержит компонент полномочий, путь не может начинаться с двух символов косой черты ("//").

Есливы настраиваете свои варианты 2 и 3 так, чтобы между ними был хотя бы один символ, например:

NSURLComponents *urlComponents = [NSURLComponents componentsWithString: @"/a/////foo"];

Я считаю, что это должно вывести правильное количество слешей.

...