Jon*_*ham 9 rest https objective-c asihttprequest ios
我已经开始在我的iOS项目中使用ASIHTTPRequest来执行REST服务器方法调用,到目前为止它已经非常成功.我只有一个奇怪的间歇性问题.偶尔我使用[ASIHTTPRequest startAsynchronous]得到以下响应:
HTTP/0.9 200 OK
发生这种情况时,我的服务器方法不会被调用.通常,每个方法调用都会返回一个以"HTTP/1.1"开头的响应.我正在使用带有GeoTrust/RapidSSL证书的HTTPS来保护连接.有趣的是,如果我尝试连接到SSL端口(443)但指定'http'作为协议,我发现我得到了相同的'HTTP/0.9 200 OK'响应.
只是为了添加更多信息 - 问题主要发生在应用程序闲置一段时间后.例如请求成功完成,然后让应用程序空闲一段时间,然后在下一个请求发生问题然后应用程序继续正常工作.
任何人都可以了解可能发生的事情吗?
非常感谢,乔纳森
更新:当问题发生时,我已经粘贴了ASIHTTPRequest输出的一些调试信息:
2012-07-12 09:35:49.376 mytestapp[3038:18f07] [CONNECTION] Closing connection #13 because it has expired
2012-07-12 09:35:49.377 mytestapp[3038:18f07] [CONNECTION] Closing connection #14 because it has expired
2012-07-12 09:35:49.378 mytestapp[3038:18f07] [CONNECTION] Closing connection #15 because it has expired
2012-07-12 09:35:49.380 mytestapp[3038:18f07] [CONNECTION] Request #39 will use connection #16
2012-07-12 09:35:49.381 mytestapp[3038:18f07] [CONNECTION] Request #40 will use connection #17
2012-07-12 09:35:49.382 mytestapp[3038:18f07] [CONNECTION] Request #41 will use connection #18
2012-07-12 09:35:49.529 mytestapp[3038:18f07] [STATUS] Request <ASIHTTPRequest: 0x88a1e00> finished downloading data (0 bytes)
2012-07-12 09:35:49.529 mytestapp[3038:18f07] [STATUS] Request <ASIHTTPRequest: 0x88a1e00> received response headers
2012-07-12 09:35:49.530 mytestapp[3038:18f07] [AUTH] Request <ASIHTTPRequest: 0x88a1e00> has passed Basic authentication
2012-07-12 09:35:49.530 mytestapp[3038:18f07] [CONNECTION] Got no keep-alive header, will keep this connection open for 60.000000 seconds
2012-07-12 09:35:49.530 mytestapp[3038:18f07] [CONNECTION] Request #41 finished using connection #18
2012-07-12 09:35:49.531 mytestapp[3038:18f07] [STATUS] Request finished: <ASIHTTPRequest: 0x88a1e00>
2012-07-12 09:35:49.531 mytestapp[3038:15803] responseHeaders={
}
2012-07-12 09:35:49.531 mytestapp[3038:18f07] [STATUS] Request cancelled: <ASIHTTPRequest: 0x88a1e00>
2012-07-12 09:35:49.532 mytestapp[3038:18f07] [STATUS] Request cancelled: <ASIHTTPRequest: 0x88a0200>
2012-07-12 09:35:49.532 mytestapp[3038:18f07] [STATUS] Request <ASIHTTPRequest: 0x88a0200>: Cancelled
2012-07-12 09:35:49.532 mytestapp[3038:18f07] [CONNECTION] Request #39 failed and will invalidate connection #16
2012-07-12 09:35:49.533 mytestapp[3038:18f07] [STATUS] Request cancelled: <ASIHTTPRequest: 0x88a0a00>
2012-07-12 09:35:49.533 mytestapp[3038:18f07] [STATUS] Request <ASIHTTPRequest: 0x88a0a00>: Cancelled
2012-07-12 09:35:49.533 mytestapp[3038:18f07] [CONNECTION] Request #40 failed and will invalidate connection #17
Run Code Online (Sandbox Code Playgroud)
不确定这种情况下的 IOS 细节,但 HTTP 0.9 已被完全放弃。这样做的原因很明显 - 它不支持“Host:”标头。这意味着单个 IP 根本无法拥有虚拟主机。这些东西在 90 年代末就已经过时了。
这样的反应在现实生活中不应该发生。如果仍然发生,则某些客户端发出了类似“GET / HTTP/0.9”的请求。但这些客户大约 15 年前就消失了。
HTTP 不太了解 SSL。所以我相信这没有关系。SSL 隧道已建立,然后运行普通 HTTP。
作为结论,我想说你或某人可能触发了过时的方法。IOS 可能只是不知道如何处理它。也许IOS方法是包含主机名的有限方法,因此它不会触发。无论如何,如果客户端真的说的是 0.9,您不必担心,因为无论如何它都无法从大多数站点获得正确的答案。如果客户端使用 1.1,而您回答 0.9,则请求可能会以某种方式被误解,并且会出现回退机制到尽可能低的 HTTP 版本。也许您忘记设置请求的主机名或其中出现语法错误?
| 归档时间: |
|
| 查看次数: |
1868 次 |
| 最近记录: |