1

在我正在构建的应用程序中,我需要向 API 发送一个安全的 POST 请求。请求的主体是 JSON。指定请求如下:

NSMutableURLRequest *urlRequest=[NSMutableURLRequest
                                     requestWithURL:
                                     [NSURL URLWithString: @"https://testserver.test:443/userinfo"]
                                     cachePolicy:NSURLRequestUseProtocolCachePolicy
                                     timeoutInterval:60.0];

[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[urlRequest setValue:delegate.currentUser.token forHTTPHeaderField:@".ASPXAUTH"];

[urlRequest setHTTPMethod:@"POST"];

[urlRequest setHTTPBody:postData];
NSURLConnection* connection = [[NSURLConnection alloc] 
                                initWithRequest:urlRequest delegate:self];

这通常有效,但有时无效,然后会收到 400: HTTPS Required 消息。在服务器端,即使我在 URL 中指定了端口,这些尝试也显示请求被发送到端口 80 而不是 443(这甚至是必要的吗?)。

有什么我可能在这里遗漏的想法吗?

编辑:这是发生这种情况时我得到的响应

headers: {
"Cache-Control" = "no-cache";
"Content-Length" = 14;
"Content-Type" = "text/plain; charset=utf-8";
Date = "Tue, 16 Apr 2013 12:31:02 GMT";
Expires = "-1";
Pragma = "no-cache";
Server = "Microsoft-IIS/7.5";
"Set-Cookie" = "ARRAffinity=ed9f________________________________8ac4;Path=/;Domain=testserver.test:443, WAWebSiteSID=c390_________________0; Path=/; HttpOnly";
"X-AspNet-Version" = "4.0.30319";
"X-Powered-By" = "ASP.NET, ARR/2.5, ASP.NET";

}

编辑2:想法。

  1. 我是否必须以某种方式配置 NSMutableURLRequest 以确保它使用安全连接?还是 NSURLConnection?
  2. 为什么它有时有效,有时无效?
4

2 回答 2

1

服务器端是否有多台服务器,其中一台未正确设置 HTTPS?由于该问题仅在某些时候出现,因此不太可能是客户端问题。您不需要在 url 中指定端口。

于 2013-04-16T13:32:39.017 回答
0

REST是一个非常高级的概念。事实上,它甚至根本没有提到 HTTP!

如果您对如何在 HTTP 中实现 REST 有任何疑问,可以随时查看Atom 发布协议 (AtomPub)规范。AtomPub 是一种使用 HTTP 编写 RESTful Web 服务的标准,由许多 HTTP 和 REST 杰出人士开发,其中一些输入来自 REST 的发明者和 HTTP 本人的(共同)发明者 Roy Fielding。

事实上,您甚至可以直接使用 AtomPub。虽然它来自博客社区,但绝不限于博客:它是一种通用协议,用于通过 HTTP 与任意(嵌套)任意资源集合进行 RESTful 交互。如果您可以将您的应用程序表示为资源的嵌套集合,那么您可以只使用 AtomPub,而不必担心是使用 PUT 还是 POST,返回什么 HTTP 状态代码以及所有这些细节。

这就是 AtomPub 关于资源创建的说法:

要将成员添加到集合中,客户端将 POST 请求发送到集合的 URI。

希望这可以帮助。

于 2013-04-16T12:35:27.780 回答