Http的基本通信过程

HTTP协议简介

HTTP 的全称是 HypertextTransfer Protocol ,超文本传输协议
规定 客户端 服务器 之间的数据传输格式
客户端 服务器 能有效地进行数据沟通

HTTP协议的特点(为什么选择HTTP)

简单快速
1.因为 HTTP 协议简单,所以 HTTP 服务器的程序规模小,因而通信速度很快
2.灵活
3.HTTP 允许传输各种各样的数据
4. HTTP 0.9 1.0 使用非持续连接
5.限制每次连接只处理一个请求,服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间
要想使用 HTTP 协议向服务器索取数据,得先了解 HTTP 通信 过程
完整的 http 通信可以分为 2 大步骤
请求 客户端 服务器 索要数据
响应 服务器 返回 客户端 相应的数据

HTTP通信过程 - 请求

HTTP 协议规定 :1 个完整的由 客户端 发给 服务器 HTTP 请求中包含以下内容
请求头 :包含了 对客户端的环境描述 客户端请求信息

GET /minion.png HTTP/1.1   //包含了请求方法、请求资源路径、HTTP协议版本

Host: 120.25.226.186:32812   //客户端想访问的服务器主机地址

User-Agent: Mozilla/5.0  //客户端的类型,客户端的软件环境

Accept: text/html,*/*   //客户端所能接收的数据类型

Accept-Language: zh-cn   //客户端的语言环境

Accept-Encoding: gzip   //客户端支持的数据压缩格式

请求体 客户端 发给 服务器 的具体数据,比如文件数据 (POST 请求才会有 )

HTTP通信过程 - 响应

客户端 服务器 发送请求, 服务器 应当做出响应,即返回数据给 客户端
HTTP 协议规定 :1 个完整的 HTTP 响应 中包含以下内容
响应头 :包含了 对服务器的描述 对返回数据的描述

HTTP/1.1 200 OK            //包含了HTTP协议版本、状态码、状态英文名称

Server:Apache-Coyote/1.1   //服务器的类型

Content-Type: image/jpeg   //返回数据的类型

Content-Length: 56811   //返回数据的长度

Date: Mon, 23 Jun2014 12:54:52 GMT  //响应的时间

响应体 服务器 返回给 客户端 的具体数据,比如文件数据

常见响应状态码

状态码

英文名称

中文描述

200

OK

请求成功

400

Bad Request

客户端请求的语法错误,服务器无法解析

404

Not Found

服务器无法根据客户端的请求找到资源

500

Internal Server Error

服务器内部错误,无法完成请求



iOS中发送HTTP请求的方案

iOS 中,常见的发送 HTTP 请求的方案有
苹果原生(自带)
NSURLConnection :用法简单,最古老最经典最直接的一种方案 坑比较多
NSURLSession :功能比 NSURLConnection 更加强大,苹果目前比较推荐使用这种技术 【2013 推出, iOS7 开始出的技术
CFNetwork NSURL *的底层,纯 C 语言
第三方框架
ASIHttpRequest :外号“ HTTP 终结者”,功能极其强大,可惜早已停止更新
AFNetworking :简单易用,提供了基本够用的常用功能,维护和使用者多


发送HTTP请求的方法

HTTP / 1.1 协议中,定义了 8 种发送 http 请求的方法
GET POST OPTIONS HEAD PUT DELETE TRACE CONNECT PATCH
根据 HTTP 协议的设计初衷,不同的方法对资源有不同的操作方式
PUT :增
DELETE :删
POST :改
GET :查
最常用的是 GET POST (实际上 GET POST 都能办到增删改查)

GETPOST对比

GET POST 的主要区别表现在数据传递上
GET
在请求 URL 后面以 ? 的形式跟上发给服务器的参数,多个参数之间用 & 隔开,比如

http://ww.test.com/login?username=123&pwd=234&type=JSON

由于浏览器和服务器对 URL 长度有限制,因此在 URL 后面附带的参数是有限制的,通常不能超过 1KB
POST
发给服务器的参数全部放在 请求体
理论上, POST 传递的数据量没有限制(具体还得看服务器的处理能力)

GETPOST的选择

选择 GET POST 的建议
如果要传递大量数据,比如文件上传,只能用 POST 请求
GET 的安全性比 POST 要差些,如果包含机密 \ 敏感信息,建议用 POST
如果仅仅是索取数据(数据查询),建议使用 GET
如果是增加、修改 删除数据,建议使用 POST





你可能感兴趣的:(iOS,iOS,http)