gpt4 book ai didi

ios - NSURL URLWithString :relativeToURL: is clipping relative url

转载 作者:IT王子 更新时间:2023-10-29 07:58:34 25 4
gpt4 key购买 nike

我正在尝试实现一个使用 RestKit 的 iOS 应用程序。到目前为止,在我见过的所有示例中,都使用以下代码来创建 URL:

NSURL *baseURL = [NSURL URLWithString:@"https://api.service.com/v1"];
NSURL *relativeURL = [NSURL URLWithString:@"/files/search" relativeToURL:baseURL];

但是 [relativeURL absoluteString] 将返回 https://api.service.com/files/search

所以我试了几个例子:

NSURL *baseURL1 = [NSURL URLWithString:@"https://api.service.com/v1/"];
NSURL *baseURL2 = [NSURL URLWithString:@"https://api.service.com/v1"];
NSURL *baseURL3 = [NSURL URLWithString:@"/v1" relativeToURL:[NSURL URLWithString:@"https://api.service.com"]];

NSURL *relativeURL1 = [NSURL URLWithString:@"/files/search" relativeToURL:baseURL1];
NSURL *relativeURL2 = [NSURL URLWithString:@"/files/search" relativeToURL:baseURL2];
NSURL *relativeURL3 = [NSURL URLWithString:@"/files/search" relativeToURL:baseURL3];
NSURL *relativeURL4 = [NSURL URLWithString:@"files/search" relativeToURL:baseURL1];
NSURL *relativeURL5 = [NSURL URLWithString:@"files/search" relativeToURL:baseURL2];
NSURL *relativeURL6 = [NSURL URLWithString:@"files/search" relativeToURL:baseURL3];

NSLog(@"1: %@", [relativeURL1 absoluteString]);
NSLog(@"2: %@", [relativeURL2 absoluteString]);
NSLog(@"3: %@", [relativeURL3 absoluteString]);
NSLog(@"4: %@", [relativeURL4 absoluteString]);
NSLog(@"5: %@", [relativeURL5 absoluteString]);
NSLog(@"6: %@", [relativeURL6 absoluteString]);

这是输出:

1: https://api.service.com/files/search
2: https://api.service.com/files/search
3: https://api.service.com/files/search
4: https://api.service.com/v1/files/search
5: https://api.service.com/files/search
6: https://api.service.com/files/search

所以返回我想要的唯一示例是#4。谁能解释一下为什么?

最佳答案

我读了[RFC1808]它定义了解析相对 URL 的规范算法

2 个问题:

  1. 相对 URL 不能以/开头,或者它被认为是绝对的:

     Step 4: If the embedded URL path is preceded by a slash "/", the
    path is not relative and we skip to Step 7."
  2. 当基本 url 以非斜杠结尾时。从最后一个斜杠开始的所有内容都被跳过

     Step 6: The last segment of the base URL's path (anything
    following the rightmost slash "/", or the entire path if no
    slash is present) is removed and the embedded URL's path is
    appended in its place. The following operations are
    then applied, in order, to the new path:"

这样就可以解释了。 baseURL 需要以/结尾,相对 url 不应以/

开头

关于ios - NSURL URLWithString :relativeToURL: is clipping relative url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16582350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com