HTTP请求遵循客户端-服务器范式,客户端建立一个到服务器的TCP连接,然后发送HTTP请求。
服务器随后通过在同一个TCP连接上发送一个HTTP响应来响应该请求。
客户端可以重用这个TCP连接发送另一个请求或是将连接关闭。建立一个TCP连接遵循三次握手协议,而关闭一个TCP连接需要四次握手。
HTTP协议与HTTPS协议最大的差别在于会话的连接建立阶段,HTTPS协议需要在客户端HTTP请求发送前与服务器建立SSL会话。
HTTP请求包含3部分:请求行、请求头与请求体。请求行包含:HTTP请求方法、请求URI与HTTP版本。
HTTP请求方法:
GET:从服务器端获取一段实体
POST:使用客户端提供的数据更新实体,且POST请求是非幂等的,处理多个相同请求与处理单个该请求结果不同
HEAD:获取响应的元数据,常用于检查服务器最近的内容变化而不用检索全部内容
PUT:使用客户端提供的数据添加实体,服务器所需信息一般放在请求体之中,且PUT请求大多是幂等的
DELETE:根据URI内容或客户端提供的请求体来删除实体
NSURL:用于管理URL值并访问URL所指向的内容,所给URL可指向本地资源也可以指向网络资源,如果指向的是网络资源,就会在后台线程中执行代码。NSURL对象是不可变的,无法先构建空的NSURL对象然后通过调用赋值方法来装配其属性。
NSURLRequest:将之前生成的NSURL封装成请求,包含了加载URL内容所需的信息。如果URL是HTTP或HTTPS,那么请求方法将是GET,并且使用操作系统提供的默认请求头。NSMutableURLRequest是NSURLRequest的子类,提供了赋值方法以修改请求的属性。可以通过内存或NSInputStream向NSURLRequest提供请求体,方法为setHTTPBodyStream(inStream)。
NSURLConnection:是URL加载系统活动的中心,提供了用于初始化,开启与取消连接的方法。
NSURLResponse:会在URL加载请求完毕后返回,如果成功会返回NSData,在OC以及Swift2.0之前,失败会返回NSError,在Swift2.0之后采用try catch来进行错误处理。NSHTTPURLResponse是NSURLResponse的子类,增添了响应头(为NSDictionary类型,键为头的名字,值为头的值)和HTTP状态码作为额外属性。