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. 【福利】微信小程序精选Demo合集

    小编最近在开发小程序,也读到了不少优秀的小程序源码,项目中有些需求可以直接从源码里粘贴复制过来,虽然这样做不利于自己独立编写代码,但比较是给公司做项目啊,秉着效率第一的原则,简直没有什么比ctrl+c ...

  2. GTID的限制

    1.不支持非事务引擎(从库报错,stop slave;start slave;忽略). 2.不支持create table ... select 语句复制(主库直接报错). 3.不允许一个SQL同时更 ...

  3. 一个封装比较完整的FTP类——clsFTP

    前几天,看见园子里面的博友写了一个支持断点续传的FTP类,一时技痒,干脆写了个更完整的clsFtp类.只是我写这个clsFtp不是支持断点续传的目的,而是为了封装FTP几个基本常用的操作接口. 功能 ...

  4. 【29.89%】【codeforces 734D】Anton and Chess

    time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  5. 【record】11.7..11.13

    好少

  6. linux的开机启动过程:

    简单视图 按下电源开关 开机自检(BIOS)弹笔记本logo的时候,检查cpu 硬盘 这些硬件问题 MBR引导 一般是通过硬盘启动系统 GRUB的菜单 黑底白字有个倒数计时 可以选择内核 yum命令可 ...

  7. Node.js,一生所爱

    下午参加了<云品秀--前端前沿>,用友云平台前端架构师郭永峰(站着的那位)讲得很棒,而我最关注的就是Node了.最后我问了他关于独立开发,后端选择Node还是别的语言.他讲了很多,说自己在 ...

  8. 高并发场景之RabbitMQ

    高并发场景之RabbitMQ 上次我们介绍了在单机.集群下高并发场景可以选择的一些方案,传送门:高并发场景之一般解决方案 但是也发现了一些问题,比如集群下使用ConcurrentQueue或加锁都不能 ...

  9. iOS项目double、float精度丢失解决办法

    描述 在iOS项目中老是遇到double.float精度丢失的问题 PS: NSString * jsonStr = @"{\"9.70\":9.70,\"67 ...

  10. cordova使用cordova-plugin-baidumaplocation插件获取定位

    原文:cordova使用cordova-plugin-baidumaplocation插件获取定位 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m ...