ASIHTTPRequest,请求发送两次



我刚刚开始使用iOs的ASIHTTPRequest,我有一个小问题。所有请求都被发送两次到服务器,即使我只从库中得到一次对委托方法的回复。

同步和异步请求都有这个问题。我使用带有ARC的Xcode 4,但通过添加-fno-objc-arc作为编译器标志来禁用ashttprequest。

你知道怎么了吗?

代码:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
}

这也让我很难受。我使用GET请求来验证服务器上的多用途凭证代码。当我们为兑换代码增加利率限制时,一些客户报告说,他们在应该达到上限之前就达到了上限。结果是一些验证触发了两个赎回。

您的请求正在使用GET方法。

使用GET时的默认行为是允许持久连接(Keep-Alive HTTP报头)。

当使用持久连接时,如果网络上的某些东西看起来不稳定(这是一个技术术语),您的GET请求可能会被重新传输,而不是请求失败。这通常是可取的,因为GET请求通常不会对服务器产生任何副作用。

另一方面,

POST或PUT请求默认不使用持久连接,也不会重新传输您的操作,这很可能是信用卡购买或其他具有重大副作用的操作。

如果你想防止你的ashttprequest GET有时发送2个或更多的服务器请求(由于网络问题超出你的控制),你可以简单地设置这个标志:

request.shouldAttemptPersistentConnection = NO;

这将处理服务器上的虚假GET重复。

感谢您的回复。我搬到了新的MKNetworkKit,从来没有回头看ASIHttpRequest。https://github.com/MugunthKumar/MKNetworkKit

Øystein

它可能发送一个HEAD请求来获取响应大小,然后发送一个GET请求来实际获取内容。

这可能是因为正在使用持久连接,所以您会看到旧连接上的请求失败,然后是新连接上的工作请求。(GregInYEG也可能是一个HEAD请求)

如果你使用wireshark或charlesproxy等工具收集网络跟踪,那么就有可能看到到底发生了什么。

最新更新