iOS网络请求浅谈

http请求:
1 请求行:http请求方法、请求URI、http版本
2 请求头:他向服务器提供额外的元数据,这些元数据可以描述客户端、进一步描述请求或是从服务器请求莫种类型的响应。每个请求可以提供一个或多个头。Host头是http1.1请求中唯一必须提供的头。它提供了客户端指定的原始主机名。
3 请求体:请求体可以是任意的字节序列,通过一个空行与头分隔开来。请求体必须遵循客户端与服务器之间预先确定的数据编码。对于web浏览器之间,通常是表单编码数据,对于移动应用来说,通常是XML或JSON数据。
http响应
1 状态行:http版本、请求结果的状态值(首先是一个三位数的整数值,包含了请求的结果代码。最后是条说明短语,提供了关于代码的简短文本说明)
2 响应头:响应头之间通过回车或换行符进行分隔。
3 响应体:响应体通过空行与响应头分隔开来。可以包含任意数量的二进制字符。

所有的请求类型公用的对象:
NSURL、NSURLRequest、NSURLConnection、NSURLResponse
1 NSURL
 NSURL可以指向文件资源也可以指向网络资源,这两者资源使用上没有任何区别,只是时间不同。NSURL提供了很多访问器方法来读取URL各部分的值,每个访问其只读取访问URL的一部分。NSURL对象是不可变的,这意味着无法构建空的NSURL对象,然后再调用对象的赋值方法来装配属性。
2 NSURLRequest
NSURLRequest对象包含了加载URL内容所需的信息,并且独立于URL中指定的协议。ios中的URL加载系统支持http、HTTPS、FTP、FILE内容的加载。URL系统提供了一种扩展方式已处理新的协议,方式是创建NSURLProtocol的子类,然后将返回结果提供给URL加载系统。
如果URL是HTTP或HTTPS,那么请求方法将是GET,并且使用操作系统默认的头。NSURLRequest不能修改属性,除了URL、缓存策略和请求超时之外,如果要修改属性要使用NSMutableURLRequest。
有两种方式向NSMutableURLRequest提供http请求体:在内存中(直接赋值)或通过NSInputStream。如果是发送视频、照片等大容量数据,通过输入流之最佳选择。例如:
    NSString *srcFilePath;
    NSInputStream *inputStream = [NSInputStream inputStreamWithFileAtPath :srcFilePath];
    [request setHTTPBodyStream :inputStream];
  @property BOOL allowsCellularAccess 设置是否可以通过蜂窝网络发送
3 NSURLConnection
4 NSURLResponse
NSURLResponse对象会在URL加载请求完毕后返回。

同步请求
      1.只在后台线程中使用同步请求,除非确定请求访问的是本地文件资源,否则请不要再主线程使用。
     2.只有在知道返回的数据不会超过应用的内存时才使用同步请求。记住整个响应体都会在代码的内存中。如果响应很大会导致应用内存溢出的问题。此外当代码将响应解析为所需要的格式是可能需要复制返回数据,这会导致内存增加一倍。
            3.在处理返回的数据前,需要需要同时检查error和response的状态码。
          4.如果源URL需要验证,那么不要使用同步请求,因为同步框架并不支持对认证请求作出响应。唯一例外的是BASIC认证,因为认证信息可以通过URL或请求头进行传递。但是以这种方式会增加应用程序和服务器之间的耦合度。
          5.如果需要向用户提供进度条,那么不要用同步请求,因为请求是原子的,无法提供中间的进度指示信息。
          6.如果通过流解析器渐进解析数据,也不能使用同步请求。
          7.如果在请求完成前需要取消,也不能使用同步请求。

队列式异步请求
           和同步请求注意事项差不多,参见 同步请求
异步请求
      1.对于大的上传或下载来说,请使用异步请求以减少应用的内存专用量
     2.在需要认证的情况下请使用异步请求
     3.如果需要向用户提供进度反馈,请使用异步请求
     4.在后台线程上使用异步请求要提供一个运行循环
     5.对于可以在后台线程的请求队列中轻松调度和完成的简单请求来说,没有必要使用异步请求
     6.如果使用输入流来上传数据,请实现connection:newBodyStream:方法以避免对输入流的复制


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值