ASIHTTPRequest中数据压缩问题与gzip
2016-02-25 11:13
288 查看
出现了类似问题,先mark,以后修改
最近使用asi发现,部分网络回调数据不能正常的json解析,将responseHeaders头打印出来,才发现公司服务器部分数据添加了gzip压缩传输。
最近简单的解决方法就是,设置网络请求不返回压缩数据,自动解压就ok了。[request
setAllowCompressedResponse
:NO
];
-----------------------------------------------------------------
-----------------------------------------------------------------
使用gzip来处理压缩的响应数据
从0.9版本开始,ASIHTTPRequest会提示服务器它可以接收gzip压缩过的数据。许多web服务器可以在数据被发送之前压缩这些数据——这可以加快下载速度减少流量使用,但会让服务器的cpu(压缩数据)和客户端(解压数据)付出代价。总的来说,只有特定的几种数据会被压缩——许多二进制格式的文件像jpeg,gif,png,swf和pdf已经压缩过他们的数据了,所以向客户端发送这些数据时不会进行gzip压缩。文本文件例如网页和xml文件会被压缩,因为它们通常有大量的数据冗余。
怎样设置apache的mod_deflate来使用gzip压缩数据
apache2.x以上版本已经配备了mod_deflate扩展,这使得apache可以透明地压缩特定种类的数据。要开启这个特性,你需要在apache的配置文件中启用mod_deflate。并将mod_deflate命令添加到你的虚拟主机配置或者.htaccess文件中。在ASIHTTPRequest中使用gzip
1 2 3 4 5 6 7 8 9 10 11 12 | -( IBAction )grabURL:( id )sender { NSURL *url=[ NSURL URLWithString : @ "http://www.cccsee.cn " ]; ASIHTTPRequest*request=[ASIHTTPRequest requestWithURL :url]; //默认为YES,你可以设定它为NO来禁用gzip压缩 [request setAllowCompressedResponse : YES ]; [request startSynchronous ]; BOOL *dataWasCompressed=[request isResponseCompressed ]; //响应是否被gzip压缩过? NSData *compressedResponse=[request rawResponseData ]; //压缩的数据 NSData *uncompressedData=[request responseData ]; //解压缩后的数据 NSString *response=[request responseString ]; //解压缩后的字符串 } |
相应数据的实时解压缩
默认情况下,ASIHTTPRequest会等到request完成时才解压缩返回的数据。若设置request的shouldWaitToInflateCompressedResponses属性为NO,ASIHTTPRequest将会对收到的数据进行实时解压缩。在某些情况下,这会稍稍提升速度,因为数据可以在reqeust等待网络数据时进行处理。如果你需要对响应数据流进行流处理(例如XML和JSON解析),这个特性会很有用。如果启用了这个选项,你可以通过实现代理函数request:didReceiveData:来将返回的网络数据一点一点喂给解析器。
注意,如果shouldWaitToInflateCompressedResponses被设置为NO,那么原始(未解压)的数据会被抛弃。具体情况请查阅ASIHTTPRequest.h的代码注释。
使用gzip压缩request数据
1.0.3版本的新特性就是gzip压缩request数据。使用这个特性,你可以通过设置shouldCompressRequestBody为YES来使你的程序压缩POST/PUT的内容,默认值为NO。apache的mod_deflate可以自动解压缩gzip压缩的请求体(通过合适的设置)。这个方法适用于CGI内容,但不适用于内容过滤器式的模块(例如modPHP),这种情况下,你就必须自己解压缩数据。
相关文章推荐
- Java异步执行多个HTTP请求的例子(需要apache http类库)
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
- HTTP协议之multipart/form-data请求分析
- iOS项目中网络层实现自动转为对象的网络请求工具封装
- bzoj1974 network 网络扩容 网络流
- httpclient4.5的get和post方法
- 【网络基本功系列十】细说TCP确认机制
- AFN 3.0 网络请求使用
- 【网络基本功(九)】细说TCP重传
- 网络基本功(八):细说TCP滑动窗口
- 【网络基本功系列七】细说IP地址与子网
- 【网络基本功系列五】细说路由(下)
- 网络基本功(四):细说路由(上)
- 【网络基本功系列三】细说VLAN与Trunk
- iOS开发网络篇—NSURLConnection基本使用
- 【网络基本功系列二】细说交换机
- 【网络基本功一】细说网络传输
- GIS+=地理信息+云计算技术——[网络公开课]云GIS解决方案及应用案例
- Sugeno模型的模糊神经网络的运用
- HttpURLConnection通信