客户端使用服务端API接口时,需构造HTTP请求头,一般情况下是初始化一个NSMutableURLRequest,然后设置请求方法、请求体,请求头,如下:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:bodyData];
[request setValue:@"gzip, deflate" forHTTPHeaderField:@"Accept-Encoding"];
[request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)bodyData.length] forHTTPHeaderField:@"Content-Length"];
[request setValue:authorization forHTTPHeaderField:@"Authorization"];
复制代码
下面具体说说请求头里几个字段的含义:
Accept-Encoding
表示本地可以接收压缩格式的数据,而服务器在处理时就将大文件压缩再发回客户端。客户端接收完成后在本地对数据进行解压操作。
identity: 表明没有对实体进行编码。当没有Content-Encoding header时, 就默认为这种情况。
compress: 表明实体采用Unix的文件压缩程序;
gzip:用于UNⅨ系统的文件压缩,HTTP协议上的gzip编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用gzip让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来。一般对纯文本内容可压缩到原大小的40%,从而使得数据传输速度加快。当然这也会增加服务器的负载,一般服务器中都安装有这个功能模块的。
deflate:一种使用LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩无专利算法的压缩技术。
gzip, compress, 以及deflate编码都是无损压缩算法,用于减少传输报文的大小,不会导致信息损失。 其中gzip通常效率最高, 使用最为广泛。 复制代码
HTTP内容编码和HTTP压缩的区别:在HTTP协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码。 从而达到压缩的目的。 也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。所以我们说HTTP压缩,其实就是HTTP内容编码的一种。
HTTP压缩的过程:
- 客户端发送Http request 给Web服务器, request 中有Accept-Encoding: gzip, deflate。 (告诉服务器, 浏览器支持gzip压缩)。
- 服务器接到request后, 生成原始的Response, 其中有原始的Content-Type和Content-Length。
- 服务器通过gzip,来对Response进行编码, 编码后header中有Content-Type和Content-Length(压缩后的大小), 并且增加了Content-Encoding:gzip. 然后把Response发送给客户端。
- 客户端接到Response后,根据Content-Encoding:gzip来对Response 进行解码。 获取到原始response后, 然后处理数据的显示。
Content-Type
表示内容类型,一般是指客户端存在的Content-Type,用于定义网络文件的类型和网页的编码,决定客户端将以什么形式、什么编码读取这个文件。即用于标识发送或接收到的数据的类型,客户端根据该参数来决定数据的打开方式
常见的几个Content-Type的含义如下:
常见的媒体格式类型如下:
- text/html : HTML格式
- text/plain :纯文本格式
- text/xml : XML格式
- image/gif :gif图片格式
- image/jpeg :jpg图片格式
- image/png:png图片格式
以application开头的媒体格式类型:
- application/xhtml+xml :XHTML格式
- application/xml : XML数据格式
- application/atom+xml :Atom XML聚合格式
- application/json : JSON数据格式
- application/pdf :pdf格式
- application/msword : Word文档格式
- application/octet-stream : 二进制流数据(如常见的文件下载)
- application/x-www-form-urlencoded : form中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
另外一种常见的媒体格式是上传文件之时使用的:
- multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式 以上就是我们在日常的开发中,经常会用到的若干content-type的内容格式。
Content-Length
表示述HTTP消息实体的传输长度。消息实体长度:即Entity-length,压缩之前的message-body的长度; 消息实体的传输长度:Content-length,压缩后的message-body的长度。(参数拼接成的字典)
Authorization
HTTP基本认证是一种用来允许Web浏览器,或其他客户端程序在请求时提供以用户名和口令形式的凭证的登录方式。授权机制根据服务端定的规则确定。 认证 (authentication) 和授权 (authorization) 的区别:你要登机,你需要出示你的身份证和机票,身份证是为了证明你张三确实是你张三,这就是 authentication;而机票是为了证明你张三确实买了票可以上飞机,这就是 authorization。 你要登陆论坛,输入用户名张三,密码1234,密码正确,证明你张三确实是张三,这就是 authentication;再一check用户张三是个版主,所以有权限加精删别人帖,这就是 authorization。
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误