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的基本构成:协议://主机地址/路径

  http://www.cnblogs.com/iOSClub/articles/5233432.html

  http://192.168.38.24/imgs/01.png

协议:不同的协议决定了不同的资源查找和传输方式

主机地址:存放资源主机(服务器)的IP地址

路径:资源在主机(服务器)的具体位置

2.URL中常见的几种协议

  了解了URL是什么,那么URL中常用的HTTP协议都有哪些?

  1. http:// 超文本传输协议,访问远程网络资源的方式,也是我们最常用的协议
  2. ftp:// 访问共享主机的资源的方式
  3. file:// 访问本地计算机资源的方式
  4. 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协议的优点)

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

  1. iOS开发学习概述及知识整理

    设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了.这个界面模仿了Evernote iOS app的风格. 我以迅雷不及掩耳盗铃之势开始在Xcode上编程,用 ...

  2. 【转】iOS 开发之协议protocal-代理传值delegate

    原文网址:http://www.cnblogs.com/wzrong/p/3201938.html 刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状 ...

  3. 浅谈iOS开发的协议(protocol)和代理(delegate)

    协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...

  4. iOS 开发之协议-代理传值

    刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状态,不知道两个UIViewController之间怎么进行传值. 面试过几个童鞋,问道怎么用 del ...

  5. Ios开发之协议protocol

    Protocol是ios开发中的一个难点也是一个重点,要想使用好,或者理解好它,可能需要时间的累积.今天我们就通过一个例子来简单的看一下,怎么样使用protocol. 我们今天用的例子就是模拟电脑插入 ...

  6. iOS开发中WiFi相关功能总结

    http://www.cocoachina.com/ios/20160715/17022.html 投稿文章,作者:Haley_Wong(简书) 查漏补缺集是自己曾经做过相关的功能,但是重做相关功能或 ...

  7. Windows网络编程笔记4 -- Winsock 协议相关知识

     Win32平台上的Winsock编程,Winsock是一个与协议无关的接口.以下协议是我们需要了解的: 网络协议的特征包括: 1.  面向消息 2.  面向连接和无线接 3.  可靠性和次序性 4. ...

  8. ios开发-获取手机相关信息

    今天在做客户端的时候,里面有个意见反馈功能. 调用系统带的邮件功能,发送邮件到指定邮箱. 然后我就想,应该在邮件正文部分添加手机相关内容,比如型号,版本,应用程序的版本等等,这样不仅使用者方便,开发者 ...

  9. USB协议[转]_基本上涵盖了所有最基础的USB协议相关知识。

    背景: 需要使用到USB协议,我一直尝试着去强记这个流程,现在看来,其实不用.看多了,把这个过程具象出来,就牢牢记住了. 正文: 正文转自:http://fangjian0518.blog.163.c ...

随机推荐

  1. 判断系统64位(使用GetNativeSystemInfo函数,XP时代就有这个函数了)

    判断系统64位 static bool IsWin64 (void) { SYSTEM_INFO si = {0}; typedef void (WINAPI *LPFN_PGNSI)(LPSYSTE ...

  2. Matlab Tricks(二十五)—— plot 属性

    marker: 边缘:'MarkerEdgeColor', [],(RGB 配色) 填充:'MarkerFaceColor', [](RGB 配色)

  3. 混合使用C++语言和Objective-C语言

    如果你的源文件扩展名是.m的,你还需要改成.mm,这样编译器才知道你将会在该文件中混合使用C++语言和Objective-C语言.

  4. Activity启动模式需注意的坑

    标准启动Standard模式版本差异: 在Lollipop之前,每次以MULTIPLE启动的Activity都会被压入当前任务的顶部,启动 N 次,在当前任务就会出现 N 个Activity的实例,每 ...

  5. activity-alias详解及应用

    activity-alias标签元素众所周知,AndroidManifest是一个xml文件,它包含很多标签元素,如application.activity.receiver等,其中有一个叫做acti ...

  6. JNI基础

    1.JNI概述 JNI 是 Java Native Interface 的缩写,中文译为“Java 本地调用”.通俗的说JNI是一种技术,通过这种技术我们可以做到以下两点:  1)Java 程序中的函 ...

  7. 【records】10.24..10.30

    做的题越来越少了; 我是不是该学下网络流.

  8. android开发之微信支付功能的实现

    移动开发中,支付类的App越来越多,对于开发者来说也是不可少的,不可不会的:下面就来说一说支付开发的流程 1.申请你的AppID 请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将该 ...

  9. mac下装php5.6

    OS X10.11自带了php5.5,项目中使用的是php5.6,用brew install --without-apache --with-fpm --with-mysql php56装php5.6 ...

  10. 相关ubuntu有几个细节有用的工具系列

    前言 于Linux制,FTPserver有许多软件,我们已经成熟,像vsftpd, wu-ftp, Pure-FTPd等一下.不过该软件的安装一切,配置比较麻烦,建立个人FTPserver,仍是Pro ...