`
lizaochengwen
  • 浏览: 660042 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ASIHTTPRequest多次重复请求的问题

 
阅读更多
在一个车票订购的项目中,点击一次订购,却生成了2次订单,通过抓包发现,是客户端请求了2次。在和服务端一番推卸责任之后,最终定位在服务端的问题。


后来证实,问题是在ios端。


服务端:apctch2

用的是webservice


因为接口请求的格式是把参数放在url后面,这样,默认就选择GET方式。

然而,默认的GET方式采用的是connection: keep-alive(长连接方式)

HTTP持久连接(HTTP persistent connection,也称作HTTP keep-alive或HTTP connection reuse)是使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。
换句话说,在请求服务没有及时响应的时候,客户端会在同一个tcp连接中再次请求服务器。导致的结果就是,客户端的现象:请求了一次。得到了一次response。 服务端收到两次请求,给出了一次返回。

ps:这里的“没有及时响应”,不是ASIHTTPRequest里面的Timeout的概念(30秒服务器没有响应,结束当前tcp连接,建立新的tcp连接)。这里是指服务端没有立刻发送确认ack的包。


解决办法其实很简单:默认设置POST方式:

[request setRequestMethod:@"POST"];

或者

request.shouldAttemptPersistentConnection = NO;(不支持长连接)


http://blog.csdn.net/gilnuy0106/article/details/8250375
分享到:
评论

相关推荐

    ASIHttpRequest

    - 请求队列管理:可以将多个请求放入队列中,按顺序执行或并行执行,方便控制请求的顺序和并发数量。 - 请求缓存:支持自动缓存响应数据,减少不必要的网络流量和提高响应速度。 - 请求取消:可以随时取消正在...

    ASIHTTPRequest网路请求

    2. 请求队列:ASIHTTPRequest支持请求队列管理,可以批量发送请求,并按照特定顺序或并发执行,这在处理多个网络请求时非常有用。 二、使用步骤 1. 创建请求:通过 `[ASIHTTPRequest requestWithURL:]` 创建一个...

    ASIHttpRequest网络请求工具

    6. **请求队列管理**:可以将多个请求放入请求队列,实现批处理和顺序执行,避免同时发起大量请求导致服务器压力过大。 7. **自定义请求头和请求体**:允许开发者添加自定义的HTTP头和POST数据,适应各种API接口的...

    ASIHTTPRequest

    - **请求队列管理**:可以将多个请求放入队列,按顺序或并发执行。 - **请求头和身份验证**:支持自定义请求头和多种身份验证机制,如HTTP基本认证、NTLM等。 2. **使用方法** - **初始化请求**:通过`...

    ASIHTTPRequest+UITableView实现多个下载任务

    总的来说,"ASIHTTPRequest+UITableView实现多个下载任务"是一个基础的网络下载和UI展示的实例,适合初学者学习。但为了提高用户体验和性能,后续可以考虑增加Cell重用和断点续载等功能。同时,对于大型项目,现在更...

    ASIHTTPRequest框架

    6. **请求队列管理**:ASIHTTPRequest支持请求队列,可以方便地管理和控制多个并发请求,避免过度消耗系统资源。 7. **错误处理**:当请求失败时,ASIHTTPRequest会提供详细的错误信息,帮助开发者定位问题所在。 ...

    asihttprequest带demo代码包

    这个库提供了一种简单的方式来发起 HTTP 请求,处理响应,并且在 Objective-C 中进行网络编程时提供了很多便利。在“asihttprequest带demo代码包”中,你将找到一个示例项目,它可以帮助你理解和使用 ASIHTTPRequest...

    ASIHttpRequest网络请求框架

    3. **请求队列管理**:可以将多个请求放入队列,按照特定顺序或并行执行,便于管理并发请求。 4. **断点续传**:支持文件上传和下载的断点续传功能,提高了大文件传输的效率和可靠性。 5. **自动处理Cookie**:...

    iOS ASIHttpRequest 请求https

    创建ASIHttpRequest对象,并指定请求类型(GET/POST)和URL地址。 ```objective-c ASIHttpRequest *request = [ASIHttpRequest requestWithURL:[NSURL URLWithString:@"https://example.com"]]; ``` 3. **设置...

    ASIHTTPRequest网络API

    2. **请求队列**:ASIHTTPRequest提供了请求队列,可以同时管理多个网络请求,并按照指定的顺序执行它们,避免了同时处理大量请求时可能出现的问题。 3. **缓存**:ASIHTTPRequest支持HTTP缓存策略,可以自动或手动...

    ASIHttpRequest ios开发框架

    ASIHttpRequest是iOS应用开发中的一款流行网络请求库,由Alexsander Ivanov开发。这个框架在Objective-C语言环境下,为iOS开发者提供了简单易用的API,用于执行HTTP请求,包括GET、POST、PUT、DELETE等多种HTTP方法...

    ASIHTTPRequest 源码

    3. **请求队列管理**:ASIHTTPRequest提供请求队列,可以将多个请求放入队列中,按顺序执行,避免同时发起过多请求导致的性能问题。 4. **缓存机制**:支持自动缓存响应数据,提高数据获取速度,减少网络带宽使用。...

    asihttprequest

    2. 请求队列:ASIHTTPRequest 包含一个请求队列,允许开发者一次性安排多个请求,并控制它们的执行顺序和并发数量,避免过度消耗系统资源。 3. 文件上传与下载:该库支持大文件的上传和下载,可以暂停、恢复或取消...

    取消同步的ASIHTTPRequest请求

    检查ASIHTTPRequest类的startSynchronous方法,注意下面这段代码, if (![self isCancelled] && ![self complete]) { [self main]; while (!complete) { [[NSRunLoop currentRunLoop] runMode:[self ...

    ASIHTTPRequest断点续传

    例如,如果已下载了文件的一部分,客户端可以在下一次请求中指定从上次停止的地方开始继续下载。服务器响应206 Partial Content状态码,并在Content-Range头中提供当前传输的数据范围。 在ASIHTTPRequest中,实现...

Global site tag (gtag.js) - Google Analytics