iOS 之网络数据请求

iOS 网络请求主要使用了 HTTP 和 HTTPS 协议。现在主要记录 HTTP 的网络请求方式。那么在讨论网络数据请求之前就必须先了解清楚:HTTP 请求报文和 HTTP 响应报文。

HTTP 请求报文

一个HTTP请求报文由请求行(request line),请求头部(head),空行(blank line)和请求数据(request-body)4个部分组成。

<request-line>
<headers>
<blank line>
[<request-body>

请求行

由请求方法字段,URL字段和HTTP协议版本字段 3个字段组成,用空格分隔

HTTP 协议的请求方法有:GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,CONNECT

  1. GET :最常见的一种请求方式,方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。

  2. POST :将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。请求行中不包含数据字符串,这些数据保存在”请求内容”部分,各数据之间也是使用”&”符号隔开。

  3. HEAD:像GET,只不过服务端接受到HEAD请求后只返回响应行,而不会发送响应内容。

请求头部

请求头部由键/值对组成,每行一对,键和值用英文冒号“:”分隔

请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

User-Agent:产生请求的客户端类型。

Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

Referer:参考者

Accept-Language: 客户端可识别的语言

Accept-Encoding: 客户端可识别的编码方式

Connection: 链接方式

Cookie:

Content-Length: 数据的长度

Content-Type: 数据的类型

Date: 时间 

空行

最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

请求数据

请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

TTP 响应报文

HTTP响应也由四个部分组成,分别是:状态行、响应头、空格、响应数据

如下所示,HTTP响应的格式与请求的格式十分类似:

<status-line>
<headers>
<blank line>
[<response-body>]

状态行(status line)通过提供一个状态码来说明所请求的资源情况。

状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code 表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

• 1xx:指示信息–表示请求已接收,继续处理。
• 2xx:成功–表示请求已被成功接收、理解、接受。
• 3xx:重定向–要完成请求必须进行更进一步的操作。
• 4xx:客户端错误–请求有语法错误或请求无法实现。
• 5xx:服务器端错误–服务器未能实现合法的请求。