HTTP原理

  1. 什么是URL
  2. URL中常见的几种协议
  3. 什么是HTTP协议
  4. HTTP是做什么的
  5. 为什么要使用HTTP协议
  6. HTPP协议的通信过程介绍
    1. HTTP请求
    2. HTTP响应
  7. HTTP请求的选择
    1. 两种发送请求方式的比较(应用场景)
    2. GET请求
    3. POST请求
  8. 怎么发送HTTP请求
    1. 苹果原生的发送方式
    2. 通过第三方框架

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协议的优点)

  1. 灵活:HTTP协议允许传输各种类型的数据。
  2. 简单快速:HTTP协议简单,传输速度快。因为其协议简单,HTTP服务器规模比较小,所以通信速度快。
  3. 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浅析的更多相关文章

  1. IOS 网络浅析-(十三 SDWebImage 实用技巧)

    IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...

  2. IOS RunLoop浅析 三

    经过两篇的介绍我想对RunLoop应该有了简单的了解,至少不至于一无所知. 在这篇我想对“CFRunLoopObserverRef”做一下简单的补充. 在补充之前先说一下. 在现在的开发中已经很少见到 ...

  3. IOS RunLoop浅析 二

    上一篇我们说了runloop 的几种模式,那么我们在模式中又要做些什么呢??? 模式中有三个模块: 事件源(输入源) Source Source: 按照官方文档分类 Port-Based Custom ...

  4. IOS RunLoop浅析 一

    RunLoop犹如其名循环. RunLoop 中有多重模式. 在一个“时刻”只能值执行一种模式. 因此在使用RunLoop时要注意所实现的效果有可能不是你想要的. 在这里用NSTimer展示一下Run ...

  5. IOS 网络浅析-(九 NSURLSession代理简介)

    从最开始什么都不懂的小白,到到现在略知一二的小孩.我觉得不仅仅是我,大家应该都会注意到代理几乎贯穿着IOS,那么问题来了,我接下来要说什么呢,那就是.标题的内容啦.上篇网络系列的文章我介绍了NSURL ...

  6. IOS 网络浅析-(八 NSURLSession简介)

    就在不长也不短的时间前,苹果正式命令咱们要向NSURLSession看,因此我们不得不认认真真的听从老大的教导,努力认知NSURLSession.其实呢,三方早已为我们解决了问题,但是呢,我们还是有必 ...

  7. IOS 网络浅析-(三 NSURLConnection代理)

    对于现在的iOS开发,用法简单,最古老最经典最直接的NSURLConnection的作用不是很大,但是作为一名ios开发者,我们应该拥有一颗热爱学习的心,下面通过代码的实现简单介绍一下NSURLCon ...

  8. IOS设计模式浅析之单例模式(Singleton)

    说在前面 进入正式的设计模式交流之前,扯点闲话.我们在项目开发的过程中,经常会不经意的使用一些常见的设计模式,如单例模式.工厂方法模式.观察者模式等,以前做.NET开发的时候,认真拜读了一下程杰老师的 ...

  9. IOS设计模式浅析之原型模式(Prototype)

    原型模式的定义 “使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象”.最初的定义出现于<设计模式>(Addison-Wesley,1994). 简单来理解就是根据这个原型创建 ...

  10. iOS线程浅析

    一.线程概述 1. iOS里面的线程按种类可分为同步线程和异步线程.同步线程指调用同步线程的地方必须等到同步线程运行完成才干够继续向下运行.而调用异步线程的地方则在运行完调用异步线程的语句后就能够继续 ...

随机推荐

  1. linux 登录windows跳板机

    rdesktop -u 用户 -p 密码 ip -r sound:on/off -g 1200:830

  2. java中抽象类和空的方法体有什么区别?

    public abstract void test();抽象方法public void test(){};方法体为空这两个有什么区别? public abstract void test(); 抽象方 ...

  3. Android中再按一次退出实现

    很多应用中都有一个在用户后退的时候显示"再按一次退出"的提醒,这个怎么实现呢?有两种方式 第一种方式(最常用) long waitTime = 2000; long touchTi ...

  4. NOIP2015 运输计划 - 二分 + 树链剖分 / (倍增 + 差分)

    BZOJ CodeVS Uoj 题目大意: 给一个n个点的边带权树,给定m条链,你可以选择树中的任意一条边,将它置为0,使得最长的链长最短. 题目分析: 最小化最大值,二分. 二分最短长度mid,将图 ...

  5. MySQL数据库备份详解

    原文:MySQL数据库备份详解 对于任何数据库来说,备份都是非常重要的 数据库复制不能取代备份的作用 比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据 ...

  6. module.exports输出的属性被ES6如何引用的

    阮一峰的ES6教程里有讲: import 命令加载 CommonJS 模块 Node 采用 CommonJS 模块格式,模块的输出都定义在module.exports这个属性上面.在 Node 环境中 ...

  7. 浅谈Linux下各种压缩 解压命令和压缩比率对比

    Linux下压缩.解压命令五花八门,不像在windows下一个winrar打遍天下无敌手,清一色的.rar .zip格式. 比如,Linux下常用的tar tar.gz tar.bz2 .Z等等不一而 ...

  8. 从Client应用场景介绍IdentityServer4(二)

    原文:从Client应用场景介绍IdentityServer4(二) 本节介绍Client的ClientCredentials客户端模式,先看下画的草图: 一.在Server上添加动态新增Client ...

  9. jQuery memory&unique&stopOnfalse

    memory:保持以前的值,将添加到这个列表的后面的最新的值立即执行调用任何回调 (像一个递延 Deferred). 回调函数是从异步队列Deferred分离出来的,所以很多的接口设计都是为了契合De ...

  10. tomcat中同时部署两个项目的问题

    其中一个项目总是无法访问. 参考这两篇文章: 1. tomcat中同时部署两个项目的问题 2. java.lang.IllegalStateException: Web app root system ...