本节引言:

本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUrlConnection和 HttpClient的使用,文件的上传,下载,WebService的使用,WebView,Socket通信的使用等!

1.Android与互联网交互的三种方式

2.初始Http协议

实际开发中我们和服务端打交道一般用得都是基于Http协议的通信,所以学好Http协议是非常重要的,当然我们不用过于考虑一些细节的东西,有个大体的了解即可!都是一些概念性的东西!

(1)什么是Http协议

答:hypertext transfer protocol(超文本传输协议),TCP/IP协议的一个应用层协议,由于定义WEB浏览器和WEB服务器之间交换数据的过程,客户端连上web服务器后,若想获取web服务器中的某个web资源,需准守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。

(2)Http 1.0 与 Http 1.1的区别

答:1.0协议,客户端与web服务器建立连接后,只获得一个web资源。而1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源!

(3)Http协议的底层工作流程:

答:我们先要知道两个名词:

  • SYN(synchronous):TCP/IP 建立连接时使用的握手信号。
  • ACK(Acknowledgement):确认字符,确认发来的数据已经接收无误。

接着就到TCP/IP三次握手的概念:

  • 客户端发送syn包(syn=j)到服务器,进入SYN_SEND状态,然后等待服务器确认。
  • 服务器收到syn包,确认客户的syn(ack = j + 1),同时在自己也发送一个SYN包(syn=k), 即SYN + ACK包,服务器进入SYN_RECV状态
  • 客户端收到SYN + ACK包,向服务器发送确认包ACK(ack = k +1),发送完毕后,客户端与服务端 进入ESTABLISHED状态,完成三次握手,然后两者开始传送数据

如果还不是很清晰,我们再来看三次握手的示意图:

了解了是吧,然后我们就来看看Http操作的一个流程了:

  • 用户点击浏览器的url(超链接)web浏览器与web服务器建立连接
  • 建立连接后,客户端发送请求给服务器,请求的格式为:统一资源标识符(URL)+协议版本号(一般是1.1)+MIME信息(多个消息头)+一个空行
  • 服务端收到请求后,给予相应的返回信息,请求的格式为:协议版本号+状态行(处理结果)+多个信息头+空行+实体内容(比如返回的HTML)
  • 客户端接收服务端返回的信息,通过浏览器显示出来,然后与服务端断开连接,当然如果中途 某步发生错误的话,错误信息返回到客户端,并显示,如:经典的404错误!

(4)Http协议的业务流程

(5)Http的几种请求方式

实际开发中我们用得比较多的方式是Get和Post,但是实际开发可能还会用到其他请求方式,比如PUT,实际项目中就用到了,下面为了方便大家,就把所有的请求方式列出来吧

  • get:  请求获取Request-URI所标识的资源
  • post: 在Request-URI所标识的资源后附加新的数据
  • head: 请求获取由Request-URI所标识的资源的响应信息报头
  • put: 请求服务器存储一个资源,并用Request-URI作为其标识
  • delete:请求服务器删除Request-URI所标识的资源
  • trace: 请求服务器回送收到的请求信息,主要用于测试或诊断
  • connect:  保留将来使用
  • options: 请求查询服务器的性能,或者查询与资源相关的选项

(6)Get和Post的对比

用得最多的两个,当然要做一下对比啦!

  • GET : 在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔, 但数据容量通常不能超过2K,比如:http://xxx?username=…&pawd=…这种就是GET
  • POST: 这个则可以在请求的实体内容中向服务器发送数据,传输没有数量限制
  • 另外还有说一点,这两个玩意都是用来发送数据的,只是发送机制不一样,不要相信网上说的"GET获取服务器数据,POST向服务器发送数据",另外GET安全性非常低,POST安全性较高,但是执行效率却比post方法好,一般查询的时候我们用GET,数据增删改查的时候我们用POST

(7)Http状态码合集

当然,这些状态码只是给参考,实际上决定权决定在服务端(后台)的手上,一种方案是请求后,服务返回给我们的是状态,或者另一种,在应用不用弄得多语言的版本是最好用,直接返回给我们一串结果信息的json给我们,我们直接显示就好了,这样可以偷懒不少,下面列下状态码合集,参考 下就好:

  • 100~199 : 成功接受请求,客户端需提交下一次请求才能完成整个处理过程
  • 200: OK,客户端请求成功
  • 300~399:请求资源已移到新的地址(302,307,304)
  • 401:请求未授权,改状态代码需与WWW-Authenticate报头域一起使用
  • 403:Forbidden,服务器收到请求,但是拒绝提供服务
  • 404:Not Found,请求资源不存在,这个就不用说啦
  • 500:Internal Server Error,服务器发生不可预期的错误
  • 503:Server Unavailable,服务器当前不能处理客户端请求,一段时间后可能恢复正常

(8)Http协议的特点

概念性的东西,知道就好,别去背,百度百科的东西,直接复制粘贴:

1. 支持客户/服务器模式

2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、 HEAD、POST。每种方法规定了客户与服务器联系的类型不同。 由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求, 并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每 次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

本节小结:

本节讲解了我们在Android开发中涉及到网络方面的要完成的工具,以及讲解了Http协议的 相关概念,相信大家对Android移动端与服务器交互已经有了个模糊的映像,本节就到这里,下节我们来研究 Http协议的请求头与响应头!

最新文章

  1. ABP理论学习之启动配置
  2. zabbix3.0 安装Tips
  3. Windows下WebStorm使用SVN
  4. netsh winsock reset 11003
  5. 数据库 SQL语句优化
  6. R与数据分析旧笔记(十一)数据挖掘初步
  7. 多校 Cow Bowling
  8. 如何验证所做的AIX系统备份是否可用
  9. selenium 调用键盘按键
  10. C语言--嵌套循环
  11. xpath的一般用法与特殊用法
  12. web测试注意点
  13. 大佬RQY真的强
  14. flink的集群的HA高可用
  15. MySQL数据备份之mysqldump使用(转)
  16. Android Launcher分析和修改6——页面滑动(PagedView)
  17. python--json串相关的loads dumps load dump
  18. CentOS安装备忘2
  19. webpack中配置Babel
  20. 用 AutoHotKey 随时记录所想

热门文章

  1. 用编程的方式定义UI界面
  2. ThinkPHP 自动验证实例
  3. AFNetWorking 之 Get/Post 请求的使用
  4. spring mvc 异常处理和session添加
  5. (一)Lua脚本语言入门
  6. Hadoop权威指南:数据完整性
  7. AngularJs中ng-controller下的函数在调用时为什么会执行两次?
  8. FindPkgConfig----CMake的pkg-config模块
  9. sed 命令详解
  10. windows visual studio 2015安装