深谙iOS网络编程之Http真相揭秘(上)

深谙iOS网络编程之Http真相揭秘(上)_第1张图片
革码者基地

一、前言

  • 1.为什么要学习网络编程

  • 网络编程是一种实时更新应用数据的常用手段
  • 网络编程是开发优秀网络应用的前提和基础
  • 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据
类别: 案例1 案例2 案例3 案例4
新闻: 网易新闻 新浪新闻 搜狐新闻 腾讯新闻
视频: 优酷 百度视频 搜狐视频 爱奇艺视频
音乐: QQ音乐 百度音乐 酷狗音乐 酷我音乐
LBS: 百度地图 高德地图 大众点评 墨迹天气
电商: 淘宝 京东商城 天猫 蘑菇街
社交: QQ 微信 微博 陌陌
  • 2.什么是URL

  • URL的全称是Uniform Resource Locator(统一资源定位符)
  • 通过1个URL,能找到互联网上唯一的1个资源URL就是资源的地址、位置
  • 互联网上的每个资源都有一个唯一的URL
  • 3.URL中常见的协议

  • (1)HTTP
    超文本传输协议,访问的是远程的网络资源,格式是http://
    http协议是在网络开发中最常用的协议
  • (2)file
    访问的是本地计算机上的资源,格式是file://(不用加主机地址)
  • (3)mailto
    访问的是电子邮件地址,格式是mailto:
  • (4)FTP
    访问的是共享主机的文件资源,格式是ftp://

二、HTTP

  • 1.神马是HTTP

  • HTTP的全称是Hypertext Transfer Protocol,超文本传输协议
  • HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。
  • 2.HTTP主要特点概括

  • 1.支持客户/服务器模式
  • 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET,POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  • 4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
  • 6.面向链接的协议
  • 3.HTTP连接过程

  • 1、客户机(浏览器)主动向服务器(web server)发出连接请求。
  • 2、服务器接受连接请求并建立起连接。
  • 3、客户机通过此连接向服务器发出GET等http命令。
  • 4、服务器接到命令并根据命令向客户机传送相应的数据。
  • 5、客户机接收从服务器送过来的数据。
  • 6、服务器发送完数据后,主动关闭此次连接。
  • 4.HTTP的通信过程

  • 完整的http通信可以分为2大步骤
    (1)请求:客户端向服务器索要数据
    (2)响应:服务器返回客户端相应的数据


    深谙iOS网络编程之Http真相揭秘(上)_第2张图片
  • 请求

HTTP协议规定:1个完整的由客户端发给服务器的HTTP请求中包含以下内容
请求行:包含了请求方法、请求资源路径、HTTP协议版本
GET /MJServer/resources/images/1.jpg HTTP/1.1
请求头:包含了对客户端的环境描述、客户端请求的主机地址等信息
Host: 192.168.1.105:8080// 客户端想访问的服务器主机地址
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0
//客户端的类型,客户端的软件环境
Accept: text/html // 客户端所能接收的数据类型
Accept-Language: zh-cn // 客户端的语言环境
Accept-Encoding: gzip // 客户端支持的数据压缩格式
请求体:客户端发给服务器的具体数据,比如文件数据

  • 响应

客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端
HTTP协议规定:1个完整的HTTP响应中包含以下内容:
状态行:包含了HTTP协议版本、状态码、状态英文名称
HTTP/1.1 200 OK
响应头:包含了对服务器的描述、对返回数据的描述
Server: Apache-Coyote/1.1 // 服务器的类型
Content-Type: image/jpeg // 返回数据的类型
Content-Length: 56811 // 返回数据的长度
Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间
实体内容:服务器返回给客户端的具体数据,比如文件数据

深谙iOS网络编程之Http真相揭秘(上)_第3张图片

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

  • 5.HTTP请求方法

  • 在HTTP/1.1协议中,定义了8种发送http请求的方法,如下:
    GET 请求获取Request-URI所标识的资源
    POST 在Request-URI所标识的资源后附加新的数据
    HEAD 请求获取由Request-URI所标识的资源的响应消息报头
    PUT 请求服务器存储一个资源,并用Request-URI作为其标识
    DELETE 请求服务器删除Request-URI所标识的资源
    TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
    CONNECT 保留将来使用
    OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
    提示:最常用的是GET和POST(实际上GET和POST都能办到增删改查)

三、漫谈GET与POST

  • 1.GET和POST对比

GET和POST的主要区别表现在数据传递上
  • GET
    在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,比如http://ww.test.com/login?username=123&pwd=234&type=JSON

注意:由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是有限制的,通常不能超过1KB

  • POST
    发给服务器的参数全部放在请求体中
    理论上,POST传递的数据量没有限制(具体还得看服务器的处理能力)
  • 2.GET和POST的选择

选择GET和POST的建议

(1)如果要传递大量数据,比如文件上传,只能用POST请求
(2)GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
(3)如果仅仅是索取数据(数据查询),建议使用GET
(4)如果是增加、修改、删除数据,建议使用POST

  • 3.iOS中发送HTTP请求的方案

在iOS中,常见的发送HTTP请求(GET和POST)的解决方案有
  • (1)苹果原生(自带)
  • NSURLConnection:用法简单,ios9.0后废弃
  • NSURLSession:iOS 7新出的技术,功能比NSURLConnection更加强大
  • CFNetwork:NSURL*的底层,纯C语言
  • (2)第三方框架
  • AFNetworking:简单易用,提供了基本够用的常用功能
  • Alamofile:swift版的AFNetworking

你可能感兴趣的:(深谙iOS网络编程之Http真相揭秘(上))