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的基本构成:协议://主机地址/路径
http://www.cnblogs.com/iOSClub/articles/5233432.html
http://192.168.38.24/imgs/01.png
协议:不同的协议决定了不同的资源查找和传输方式
主机地址:存放资源主机(服务器)的IP地址
路径:资源在主机(服务器)的具体位置
2.URL中常见的几种协议
了解了URL是什么,那么URL中常用的HTTP协议都有哪些?
- http:// 超文本传输协议,访问远程网络资源的方式,也是我们最常用的协议
- ftp:// 访问共享主机的资源的方式
- file:// 访问本地计算机资源的方式
- mailto:// 访问电子邮件地址的方式
注意:URL中不能出现空格以及中文等特殊符号.
- URL中,所有的字符都必须是 ASCII 码;
- 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的通信过程包含两个方面:
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: 1528 // 返回数据的长度
Content-Type: application/xhtml+xml;charset=utf-8 // 返回数据的类型
Date: Mon, 15 Jun 2015 09:06:46 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开发学习概述及知识整理
设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了.这个界面模仿了Evernote iOS app的风格. 我以迅雷不及掩耳盗铃之势开始在Xcode上编程,用 ...
- 【转】iOS 开发之协议protocal-代理传值delegate
原文网址:http://www.cnblogs.com/wzrong/p/3201938.html 刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状 ...
- 浅谈iOS开发的协议(protocol)和代理(delegate)
协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...
- iOS 开发之协议-代理传值
刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状态,不知道两个UIViewController之间怎么进行传值. 面试过几个童鞋,问道怎么用 del ...
- Ios开发之协议protocol
Protocol是ios开发中的一个难点也是一个重点,要想使用好,或者理解好它,可能需要时间的累积.今天我们就通过一个例子来简单的看一下,怎么样使用protocol. 我们今天用的例子就是模拟电脑插入 ...
- iOS开发中WiFi相关功能总结
http://www.cocoachina.com/ios/20160715/17022.html 投稿文章,作者:Haley_Wong(简书) 查漏补缺集是自己曾经做过相关的功能,但是重做相关功能或 ...
- Windows网络编程笔记4 -- Winsock 协议相关知识
Win32平台上的Winsock编程,Winsock是一个与协议无关的接口.以下协议是我们需要了解的: 网络协议的特征包括: 1. 面向消息 2. 面向连接和无线接 3. 可靠性和次序性 4. ...
- ios开发-获取手机相关信息
今天在做客户端的时候,里面有个意见反馈功能. 调用系统带的邮件功能,发送邮件到指定邮箱. 然后我就想,应该在邮件正文部分添加手机相关内容,比如型号,版本,应用程序的版本等等,这样不仅使用者方便,开发者 ...
- USB协议[转]_基本上涵盖了所有最基础的USB协议相关知识。
背景: 需要使用到USB协议,我一直尝试着去强记这个流程,现在看来,其实不用.看多了,把这个过程具象出来,就牢牢记住了. 正文: 正文转自:http://fangjian0518.blog.163.c ...
随机推荐
- 判断系统64位(使用GetNativeSystemInfo函数,XP时代就有这个函数了)
判断系统64位 static bool IsWin64 (void) { SYSTEM_INFO si = {0}; typedef void (WINAPI *LPFN_PGNSI)(LPSYSTE ...
- Matlab Tricks(二十五)—— plot 属性
marker: 边缘:'MarkerEdgeColor', [],(RGB 配色) 填充:'MarkerFaceColor', [](RGB 配色)
- 混合使用C++语言和Objective-C语言
如果你的源文件扩展名是.m的,你还需要改成.mm,这样编译器才知道你将会在该文件中混合使用C++语言和Objective-C语言.
- Activity启动模式需注意的坑
标准启动Standard模式版本差异: 在Lollipop之前,每次以MULTIPLE启动的Activity都会被压入当前任务的顶部,启动 N 次,在当前任务就会出现 N 个Activity的实例,每 ...
- activity-alias详解及应用
activity-alias标签元素众所周知,AndroidManifest是一个xml文件,它包含很多标签元素,如application.activity.receiver等,其中有一个叫做acti ...
- JNI基础
1.JNI概述 JNI 是 Java Native Interface 的缩写,中文译为“Java 本地调用”.通俗的说JNI是一种技术,通过这种技术我们可以做到以下两点: 1)Java 程序中的函 ...
- 【records】10.24..10.30
做的题越来越少了; 我是不是该学下网络流.
- android开发之微信支付功能的实现
移动开发中,支付类的App越来越多,对于开发者来说也是不可少的,不可不会的:下面就来说一说支付开发的流程 1.申请你的AppID 请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将该 ...
- mac下装php5.6
OS X10.11自带了php5.5,项目中使用的是php5.6,用brew install --without-apache --with-fpm --with-mysql php56装php5.6 ...
- 相关ubuntu有几个细节有用的工具系列
前言 于Linux制,FTPserver有许多软件,我们已经成熟,像vsftpd, wu-ftp, Pure-FTPd等一下.不过该软件的安装一切,配置比较麻烦,建立个人FTPserver,仍是Pro ...