网络
网络的基本概念
- 为什么学习网络编程
- 所有的app都需要用到网络
- 只有通过网络跟外界进行数据交互、数据更新,应用才能保持新鲜、活力
- 移动网络应用 = 良好的UI +良好的用户体验 + 实时更新的数据
- 网络编程是一种实时更新应用数据的常用手段
- 网络编程是开发优秀网络应用的前提和基础
- 基本概念:
客户端:移动应用(ios/android等应用)
-
服务器:为客户端提供服务、提供数据、提供资源的机器
- 分类:
- 远程服务器(外网服务器、正式服务器)比如百度的网页,任何人只要联网就能使用,一般应用上线后使用的服务器
- 本地服务器(内网服务器、测试服务器),开发、测试阶段使用的服务器
- 分类:
请求:客户端向服务器索取数据的一种行为(通过网络向服务器发送一个请求,目的是向服务器索要资源数据)
响应:服务器对客户端的请求作出响应,返回客户端想要的资源(数据)
开发中:搭建UI界面,发送网络请求,刷新界面
HTTP相关概念
-
如何找到服务器?
- URL
-
URL
Uniform Resource Locator(统一资源定位符)
通过一个URL,能找到互联网上唯一的一个资源
URL就是资源的地址、位置,互联网上的每一个资源都有一个唯一的URL
URL的基本格式 = 协议://主机地址/路径
协议:不同的协议,代表着不同的资源查找方式,资源传输方式
主机地址:存放资源的主机(服务器)的ip地址(域名)
路径:资源在主机(服务器)中的具体位置
-
常见协议:
- HTTP:超文本传输协议,访问的是远程的网络资源,格式为http://,http协议是在网络开发中最常用的协议
- file:访问的是本地计算机上的资源,格式:file://(不用加主机地址)
- mailto:访问的是电子邮件地址,格式为mailto:
- FTP:访问的是共享主机的文件资源,格式是ftp://
-
网络编程中能够用到的协议
- TCP/IP协议簇
- HTTP属于它内部的一个子集
- 规则(协议)
- 使用到的协议簇的统称
- 分层设计思想:(查看参考模型)
- 应用层:HTTP/FTP/SMTP/DNS/RPC/SNM
- 传输层:TCP/UDP
- Internet层:RARP/IP/IGMP/ICMP
- 网络接口层:以太网...
- TCP/IP协议簇
-
HTTP协议
- 访问远程网络资源
-
思考:
- 客户端应该传什么格式的数据给服务器,服务器才能看懂?
- 服务器应该返回什么格式的数据给客户端,客户端才能看懂?
- 两边怎样传输数据才能有效沟通
- HTTP协议(超文本传输协议)Hypertext Transfer Protocol
- 规定客户端和服务器之间的数据传输格式,让客户端和服务器有效的沟通
-
HTTP协议的特点
- 简单快速
- 灵活:允许传输各种各样数据
- HTTP0.9和1.0使用非持续连接,限制每次连接只处理一个请求,服务器对客户端的请求作出响应后,马上断开连接,这种方式可以节省传输时间。HTTP1.0之后变为持续连接
-
HTTP基本通信过程
- 请求:客户端向服务器索要数据
- 响应:服务器返回客户端相应的数据
1.确定请求路径url
http://www.baidu.com:80/tools.html
2.获取主机名
www.baidu.com
3.DNS域名解析
192.168.31.1
4.获得端口号80
5.连接到192.168.31.1的端口80
6.发送HTTP GET请求
7.接收到服务器的响应
8.关闭连接
GET请求|POST请求
-
发送请求的方法
- GET:查
- POST:改
- OPTIONS
- HEAD
- PUT:增
- DELETE:删
- TRACE
- CONNECT
- PATCH
参数:传递给服务器的具体数据,比如登录时的账号、密码
-
GET和POST对比
- 区别表现在数据传递上
- GET:在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,浏览器和服务器对URL的长度有限制,因此URL后面附带的参数是有限制的,通常不能超过1KB
- POST:发给服务取得参数全部放在请求体中,理论上,POST传递的数据量没有限制
- 如何选择?(公司后台规定的,接口文档)
- 如果要传递大量数据,比如文件上传、只能用POST
- GET的安全性比POST要差一些,如果包含机密、敏感信息,建议用POST
- 如果仅仅是索取数据(数据查询),建议使用GET
- 如果是增删改查数据,建议使用POST
-
HTTP版本说明
- HTTP0.9|HTTP1.0
- 公司用的还是HTTP1.1(1997年),使用了持久连接
- HTTP2.0,提高了性能(面试会问你有没有关注2.0,你们公司用的是1.1还是2.0)
- rfc文档
-
常见的响应状态码
- 调试接口
- 200 OK 请求成功
- 400 客户端请求语法错误,服务器无法解析BadRequest
- 404 服务器无法根据客户端的请求找到资源 NotFound
- 500 服务器内部错误,无法完成请求 Internal Server Error
HTTP通信的过程(请求和响应)
-
请求
- 请求头:对客户端的环境描述、客户端请求信息
- 请求方法、请求资源路径、HTTP协议版本
- 客户端想访问的服务器主机地址
- 客户端的类型、客户端的软件环境
- 客户端所能接收的数据类型
- 客户端的语言环境
- 客户端支持的数据压缩格式
- 请求体:客户端发给服务器的具体数据,比如文件数据(post请求才会有)
- 请求头:对客户端的环境描述、客户端请求信息
-
响应
- 响应头:对服务器的描述、对返回数据的描述
- HTTP协议版本、状态码、状态英文名称
- 服务器类型
- 返回数据的类型
- 返回数据的长度
- 响应的时间
- 响应体:服务器返回给客户端的具体数据,比如文件数据
- 响应头:对服务器的描述、对返回数据的描述
-
HTTP通信过程
- 客户端 <--> 服务器
ios中发送HTTP请求的方案
- 苹果原生
- NSURLConnection
- NSURLSession:功能比NSURLConnection更加强大,2013推出,ios7开始出的技术
- CFNetwork:NSURL*的底层,纯C语言
- 第三方框架
- ASIHttpRequest:HTTP终结者,但是不更新了,没有人使用了
- AFNetworking
- MKNetworkKit