一、继承
NSMutableURLRequest ->NSURLRequest ->NSObject
以下内容均定义在NSURLRequest.h文件
一、枚举
(一)、NSURLRequestCachePolicy缓存策略的枚举类型
指示URL加载系统执行一个请求时采用的缓存策略,说白了就是怎么去加载这个request
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
NSURLRequestUseProtocolCachePolicy = 0,
NSURLRequestReloadIgnoringLocalCacheData = 1,
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
NSURLRequestReturnCacheDataElseLoad = 2,
NSURLRequestReturnCacheDataDontLoad = 3,
NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};
值 | 含义 |
---|---|
NSURLRequestUseProtocolCachePolicy | 默认缓存策略 |
NSURLRequestReloadIgnoringLocalCacheData | URL加载源端数据,忽略本地缓存 |
NSURLRequestReloadIgnoringLocalAndRemoteCacheData | 本地缓存数据、代理和其他中介都要忽视他们的缓存,直接加载源数据,未实现 |
NSURLRequestReloadIgnoringCacheData | 从服务端加载数据,完全忽略缓存。和NSURLRequestReloadIgnoringLocalCacheData一样 |
NSURLRequestReturnCacheDataElseLoad | 使用缓存数据,忽略其过期时间;只有在没有缓存版本的时候才从源端加载数据 |
NSURLRequestReturnCacheDataDontLoad | 只使用cache数据,如果不存在cache,就请求失败,不再去请求数据 用于没有建立网络连接离线模式 |
NSURLRequestReloadRevalidatingCacheData | 如果已存的缓存数据被提供它的源段确认为有效则允许使用缓存数据响应请求,否则从源段加载数据 |
(二)、NSURLRequestNetworkServiceType网络服务枚举类型
指定该request相关联的服务类型,用于向网络层指示该request的目的
typedef NS_ENUM(NSUInteger, NSURLRequestNetworkServiceType)
{
NSURLNetworkServiceTypeDefault = 0, // Standard internet traffic
NSURLNetworkServiceTypeVoIP = 1, // Voice over IP control traffic
NSURLNetworkServiceTypeVideo = 2, // Video traffic
NSURLNetworkServiceTypeBackground = 3, // Background traffic
NSURLNetworkServiceTypeVoice = 4, // Voice data
NSURLNetworkServiceTypeResponsiveData = 6, // Responsive data
NSURLNetworkServiceTypeCallSignaling API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) = 11, // Call Signaling
};
值 | 含义 |
---|---|
NSURLNetworkServiceTypeDefault | NSURLRequest创建时的默认值,对于绝大多数请求,这个值应该保持不变 |
NSURLNetworkServiceTypeVoIP | VoIP |
NSURLNetworkServiceTypeVideo | Video |
NSURLNetworkServiceTypeBackground | Background |
NSURLNetworkServiceTypeVoice | Voice |
NSURLNetworkServiceTypeResponsiveData | ResponsiveData常用于用户需要快速得到响应的场景,如即时通讯、完成购买活动等,优先级比NSURLNetworkServiceTypeDefault高 |
NSURLNetworkServiceTypeCallSignaling | CallSignaling |
二、类、方法、属性介绍
一个NSURLRequest对象表示一个独立于协议或URL方案的URL加载请求,主要封装两种数据:
- 1.The URL to load. 需要加载的URL
- 2.The policy to use when consulting the URL content cache made available by the implementation. 加载URL时采用的策略,也就是上一节的枚举类型
(一)、一些方法
方法 | 注释 |
---|---|
+ (instancetype)requestWithURL:(NSURL *)URL; |
根据给定的URL创建NSURLRequest实例,使用默认缓存策略,请求超时为60s |
+ (instancetype)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval; |
根据给出的URL、缓存策略、超时时间创建实例 |
- (instancetype)initWithURL:(NSURL *)URL; |
同第一行 |
- (instancetype)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval NS_DESIGNATED_INITIALIZER; |
同第二行,NS_DESIGNATED_INITIALIZER 这个宏表示指定构造方法,意思是推荐调用者使用该方法初始化出类的实例 |
(二)、一些属性
1.NSURLRequest
属性(readonly) | 注释 |
---|---|
@property (class, readonly) BOOL supportsSecureCoding; |
是否实现NSSecureCoding 协议 |
@property (nullable, readonly, copy) NSURL *URL; |
返回当前URL |
@property (readonly) NSURLRequestCachePolicy cachePolicy; |
返回当前缓存策略 |
@property (readonly) NSTimeInterval timeoutInterval; |
返回当前超时时间 |
@property (nullable, readonly, copy) NSURL *mainDocumentURL; |
返回当前主文档URL |
@property (readonly) NSURLRequestNetworkServiceType networkServiceType API_AVAILABLE(macos(10.7), ios(4.0), watchos(2.0), tvos(9.0)); |
返回当前request的网络服务类型 |
@property (readonly) BOOL allowsCellularAccess API_AVAILABLE(macos(10.8), ios(6.0), watchos(2.0), tvos(9.0)); |
返回request创建的连接是否允许使用蜂窝数据连接 |
2.NSMutableURLRequest
属性(readwrite) | 注释 |
---|---|
@property (nullable, copy) NSURL *URL; |
URL |
@property NSURLRequestCachePolicy cachePolicy; |
缓存策略 |
@property NSTimeInterval timeoutInterval; |
超时时间 |
@property (nullable, copy) NSURL *mainDocumentURL; |
主文档URL |
@property NSURLRequestNetworkServiceType networkServiceType API_AVAILABLE(macos(10.7), ios(4.0), watchos(2.0), tvos(9.0)); |
网络服务类型 |
@property BOOL allowsCellularAccess API_AVAILABLE(macos(10.8), ios(6.0), watchos(2.0), tvos(9.0)); |
允许蜂窝数据连接 |
三、分类方法介绍
1.NSURLRequest (NSHTTPURLRequest) : 提供访问指定HTTP协议请求信息的方法
方法 (get) | 注释 |
---|---|
@property (nullable, readonly, copy) NSString *HTTPMethod; |
返回HTTP请求方式 |
@property (nullable, readonly, copy) NSDictionary<NSString *, NSString *> *allHTTPHeaderFields; |
返回包含所有HTTP请求头字段的字典 |
- (nullable NSString *)valueForHTTPHeaderField:(NSString *)field; |
根据给出的HTTP请求头字段,返回该字段的值,可为nil。注意HTTP header field名称不区分大小写 |
@property (nullable, readonly, copy) NSData *HTTPBody; |
返回请求体的数据,主要用在POST 方法时 |
@property (nullable, readonly, retain) NSInputStream *HTTPBodyStream; |
返回请求体流,仅用于检查,操作它不安全,与HTTPBody对比,仅能设置一项给request,请求体流会在请求编码时丢失 |
@property (readonly) BOOL HTTPShouldHandleCookies; |
YES表示将设置于request的缓存也发送,NO则不发送。方法仅用于iOS10.3后 |
@property (readonly) BOOL HTTPShouldUsePipelining API_AVAILABLE(macos(10.7), ios(4.0), watchos(2.0), tvos(9.0)); |
返回是否在发送请求之前等待先前的响应,YES不等待,NO等待 |
2.NSMutableURLRequest (NSMutableHTTPURLRequest)
方法(sett) | 注释 |
---|---|
@property (copy) NSString *HTTPMethod; |
HTTP请求方式 |
@property (nullable, copy) NSDictionary<NSString *, NSString *> *allHTTPHeaderFields; |
所有HTTP请求头字段的字典 |
- (void)setValue:(nullable NSString *)value forHTTPHeaderField:(NSString *)field; |
设置request的HTTP请求头字段某个值 |
- (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field; |
给HTTP请求头增加字段与值,如果字段已存在,则将值拼接在原来的值上 |
@property (nullable, copy) NSData *HTTPBody; |
请求体 |
@property (nullable, retain) NSInputStream *HTTPBodyStream; |
请求体流,跟上行互斥 |
@property BOOL HTTPShouldHandleCookies; |
决定request的缓存是否发送,默认为YES,也就是会发送。方法仅用于iOS10.3后 |
@property BOOL HTTPShouldUsePipelining API_AVAILABLE(macos(10.7), ios(4.0), watchos(2.0), tvos(9.0)); |
决定是否在发送请求之前等待先前的响应,YES不等待,NO等待。 |
四、请求的一些介绍
1.请求头
字段 | 含义 |
---|---|
Host | 目标服务器的网络地址 |
Accept | 让服务端知道客户端所能接收的数据类型,如text/html |
Content-Type | body中的数据类型,如application/json; charset=UTF-8 |
Accept-Language | 客户端的语言环境,如zh-cn |
Accept-Encoding | 客户端支持的数据压缩格式,如gzip |
User-Agent | 客户端的软件环境,我们可以更改该字段为自己客户端的名字 |
Connection | keep-alive,该字段是从HTTP 1.1才开始有的,用来告诉服务端这是一个持久连接,“请服务端不要在发出响应后立即断开TCP连接” |
Content-Length | body的长度,如果body为空则该字段值为0。该字段一般在POST请求中才会有 |
2.请求体
尚未了解学习,后续补充
网友评论