iOS-HTTP浅析
HTTP原理
- 什么是URL
- URL中常见的几种协议
- 什么是HTTP协议
- HTTP是做什么的
- 为什么要使用HTTP协议
- HTPP协议的通信过程介绍
- HTTP请求
- HTTP响应
- HTTP请求的选择
- 两种发送请求方式的比较(应用场景)
- GET请求
- POST请求
- 怎么发送HTTP请求
- 苹果原生的发送方式
- 通过第三方框架
1 什么是URL
在介绍HTTP之前,我们对URL有一定的了解的,因为只有通过URL我们才能拿到网络上的资源。那么究竟什么是URL?
URL(Uniform Resource Locator 统一资源定位符):URL其实就是资源在互联网上的地址、位置,互联网上的每一个资源都有一个唯一的URL,只有通过URL我们才能找到互联网上唯一的资源。
URL的基本构成:协议://主机地址/路径
协议:不同的协议决定了不同的资源查找和传输方式
主机地址:存放资源主机(服务器)的IP地址
路径:资源在主机(服务器)的具体位置
2.URL中常见的几种协议
了解了URL是什么,那么URL中常用的HTTP协议都有哪些?
- http:// 超文本传输协议,访问远程网络资源的方式,也是我们最常用的协议
- ftp:// 访问共享主机的资源的方式
- file:// 访问本地计算机资源的方式
- mailto:// 访问电子邮件地址的方式
注意:URL中不能出现空格以及中文等特殊符号.
1>URL中,所有的字符都必须是 ASCII 码;
2>URL中不能出现中文和特殊符号(如空格);
所以,如果 URL 中出现了中文,需要添加百分号转译.
urlString=[urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
3. 什么是HTTP协议
HTTP协议(HyperText Tranfer Protocol 超文本传输协议):HTTP规定客户端和服务器之间数据的传输方式。
HTTP底层的原理:HTTP的底层就是通过socket建立连接通信管道的,实现数据的传输。HTTP是一个TCP传输协议(方式),是一个可靠的安全的协议。
HTTP协议是在网络开发中最常用的协议.不管是移动客户端还是PC端,访问网络资源经常使用HTTP协议.
4.HTTP是做什么的
HTTP的作用可以用一句话概述:使客户端和服务端的数据有效的传输。
5.为什么要使用HTTP协议(HTTP协议的优点)
- 灵活:HTTP协议允许传输各种类型的数据。
- 简单快速:HTTP协议简单,传输速度快。因为其协议简单,HTTP服务器规模比较小,所以通信速度快。
- HTTP协议是短连接(非持续性连接):HTTP限制每次每次连接只处理一个请求,服务器对请求作出响应后就马上断开,这样就可以节省传输时间。(这是HTTP 0.9/1.0之后使用的)
6. HTPP协议的通信过程介绍
了解HTTP协议的简介后,继续了解HTTP协议的通信过程,HTTP的通信过程包含两个方面:
1.HTTP请求:客户端想服务器端索要数据
HTTP协议规定:一个完成的HTTP协议要包含三个部分: 请求行、请求头、请求体
- 请求行:主要包含请求方法、请求路径、HTTP协议版本
"GET /resources/images/ HTTP/1.1"
- 请求头:主要包含了对客户端环境的描述,客户端请求的主机地址信息。
Host: 192.168.38.24:8080 class="Apple-tab-span">// 客户端想访问的服务器主机地址
Accept: text/html // 客户端所能接收的数据类型
Accept-Language: zh-cn // 客户端的语言环境
Accept-Encoding: gzip // 客户端支持的数据压缩格式
Host: m.baidu.com // 客户端想访问的服务器主机地址
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko/20100101 Firefox/37.0 // 客户端的类型,客户端的软件环境
- 请求体:客户端发给服务器的具体数据,比如文件/数据
HTTP响应:服务器返回客户端想要的数据
客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端
HTTP协议规定:1个完整的HTTP响应中包含以下内容:
- 状态行:包含了HTTP协议版本、状态吗、状态码对应的英文名称HTTP/1.1 200 OK
- 响应头:包含了对服务器的描述,对返回数据的描述。
Content-Encoding: gzip // 服务器支持的数据压缩格式
Content-Length: // 返回数据的长度
Content-Type: application/xhtml+xml;charset=utf- // 返回数据的类型
Date: Mon, Jun :: GMT // 响应的时间
Server: apache // 服务器类型
- 实体内容:服务器返回给客户端的具体数据(图片/html/文件...)
7. HTTP请求的选择
1.HTTP请求的简单说明
1.HTTP的方法
HTTP协议定义了很多方法对应不同的资源操作,其中最常用的是GET 和 POST 方法.
GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
增:PUT
删:DELETE
改:POST
查:GET
因为 GET 和 POST 可以实现上述所有操作,所以,在现实开发中,我们只要会用GET 和 POST 方法就可以了.
2.参数
在与服务器交互时,有时候需要给服务器发送一些数据,比如登录时需要发送用户名和密码.
参数:就是指传递给服务器的具体数据.
2. GET请求
GET:本质是从服务器得到数据,效率更高.并且GET请求可以被缓存.
注意: 网络缓存数据,保存在SQLite的数据库中(路径:NSHomeDirectory())。
在请求 URL 后面以 ? 的形式跟上发给服务器的参数,参数以 "参数名"="参数值"的形式拼接,多个参数之间用 & 分隔.
注意:GET的长度是有限制的,不同的浏览器有不同的长度限制,一般在2~8K之间.
3. POST请求
POST:本质是向服务器发送数据,也可以获得服务器处理之后的结果,效率不如GET.POST请求不可以被缓存,每次刷新之后都需要重新提交表单.
发送给服务器的参数全部放在'请求体'中;
理论上,POST传递的数据量没有限制.
注意:所有涉及到用户隐私的数据(密码/银行卡号等...)都要用POST的方式传递.
4.GET和POST请求的选择
GET和POST请求的选择可以参考下面四个原则:
1.如果要传递大量数据,比如文件上传,只能用POST请求
2.GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
3.如果仅仅是索取数据(数据查询),建议使用GET
4.如果是增加、修改、删除数据,建议使用POST
8. 怎么发送HTTP请求
建议:
为了提高开发效率,企业开发用的基本是第三方框架
1. 苹果原生的发送请求
NSURLConnection:用法简单,最古老最经典最直接的一种方案
NSURLSession:iOS 7新出的技术,功能比NSURLConnection更加强大
CFNetwork:NSURL*的底层,纯C语言
2. 第三方框架
ASIHttpRequest:外号“HTTP终结者”,功能极其强大,可惜早已停止更新
AFNetworking:简单易用,提供了基本够用的常用功能
iOS-HTTP浅析的更多相关文章
- IOS 网络浅析-(十三 SDWebImage 实用技巧)
IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...
- IOS RunLoop浅析 三
经过两篇的介绍我想对RunLoop应该有了简单的了解,至少不至于一无所知. 在这篇我想对“CFRunLoopObserverRef”做一下简单的补充. 在补充之前先说一下. 在现在的开发中已经很少见到 ...
- IOS RunLoop浅析 二
上一篇我们说了runloop 的几种模式,那么我们在模式中又要做些什么呢??? 模式中有三个模块: 事件源(输入源) Source Source: 按照官方文档分类 Port-Based Custom ...
- IOS RunLoop浅析 一
RunLoop犹如其名循环. RunLoop 中有多重模式. 在一个“时刻”只能值执行一种模式. 因此在使用RunLoop时要注意所实现的效果有可能不是你想要的. 在这里用NSTimer展示一下Run ...
- IOS 网络浅析-(九 NSURLSession代理简介)
从最开始什么都不懂的小白,到到现在略知一二的小孩.我觉得不仅仅是我,大家应该都会注意到代理几乎贯穿着IOS,那么问题来了,我接下来要说什么呢,那就是.标题的内容啦.上篇网络系列的文章我介绍了NSURL ...
- IOS 网络浅析-(八 NSURLSession简介)
就在不长也不短的时间前,苹果正式命令咱们要向NSURLSession看,因此我们不得不认认真真的听从老大的教导,努力认知NSURLSession.其实呢,三方早已为我们解决了问题,但是呢,我们还是有必 ...
- IOS 网络浅析-(三 NSURLConnection代理)
对于现在的iOS开发,用法简单,最古老最经典最直接的NSURLConnection的作用不是很大,但是作为一名ios开发者,我们应该拥有一颗热爱学习的心,下面通过代码的实现简单介绍一下NSURLCon ...
- IOS设计模式浅析之单例模式(Singleton)
说在前面 进入正式的设计模式交流之前,扯点闲话.我们在项目开发的过程中,经常会不经意的使用一些常见的设计模式,如单例模式.工厂方法模式.观察者模式等,以前做.NET开发的时候,认真拜读了一下程杰老师的 ...
- IOS设计模式浅析之原型模式(Prototype)
原型模式的定义 “使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象”.最初的定义出现于<设计模式>(Addison-Wesley,1994). 简单来理解就是根据这个原型创建 ...
- iOS线程浅析
一.线程概述 1. iOS里面的线程按种类可分为同步线程和异步线程.同步线程指调用同步线程的地方必须等到同步线程运行完成才干够继续向下运行.而调用异步线程的地方则在运行完调用异步线程的语句后就能够继续 ...
随机推荐
- NET中的System.Transactions(分布式事务)
NET中的System.Transactions(分布式事务),当项目开发完成以后,调用的时候遇到了MSDTC的问题,在查阅了相关资料后将这个问题解决了,大致的问题主要是使用了分布式事务,而无法访问到 ...
- arm-linux内存管理学习笔记(1)-内存页表的硬件原理
linux kernel集中了世界顶尖程序猿们的编程智慧,犹记操作系统课上老师讲操作系统的四大功能:进程调度 内存管理 设备驱动 网络.从事嵌入式软件开发工作,对设备驱动和网络接触的比較多. 而进程调 ...
- Ambari——大数据平台的搭建利器(一)
Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是**项目.目前最新的发布版本是 2.0.1,未来不久将发布 2.1 版本 ...
- [Angular] Difference between ngAfterViewInit and ngAfterContentInit
Content is what is passed as children. View is the template of the current component. The view is in ...
- codeblocks按c99标准编译c文件的设置
作者:朱金灿 来源:http://blog.csdn.net/clever101 早上用codeblocks编译一个c文件,出现这样一个编译错误: +'for'+loop+initial+declar ...
- 机器学习: TensorFlow 的数据读取与TFRecords 格式
最近学习tensorflow,发现其读取数据的方式看起来有些不同,所以又重新系统地看了一下文档,总得来说,tensorflow 有三种主流的数据读取方式: 1) 传送 (feeding): Pytho ...
- 《Windows核心编程》之“完成端口”(对所有IO都是如此,不仅仅是对socket)
<Windows核心编程>第10章开头部分一再强调:“IO Completion Port”是“构建高性能.可升缩的应用程序”的最佳设施之一,它不仅适用于处理设备IO,也适用于其它越来越多 ...
- 【14.36%】【codeforces 614C】Peter and Snow Blower
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- hadoop 3.x 集群/单个节点的启动与停止
1.单个节点操作 启动|停止单个节点 hdfs --daemon start|stop datanode hdfs --daemon start|stop namenode 启动|停止单个节点的Nod ...
- WPF 使用不安全代码快速从数组转 WriteableBitmap
原文:WPF 使用不安全代码快速从数组转 WriteableBitmap 本文告诉大家一个快速的方法,直接把数组转 WriteableBitmap 先来说下以前的方法,以前使用的是 BitmapSou ...