`

Android网络编程要学的东西与Http协议学习

 
阅读更多

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错误!

对于上面的流程如果还不清晰,我们可以使用HttpWatch或者firefox抓下包: PS:测试网站是小猪的学校的教务系统,输入账号密码后请求登陆,我们可以看到下述信息:

HTTP请求包含的内容:

HTTP响应包括的内容:

这就一目了然了是吧!

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

PS:关于OSI七层协议以及TCP四层模型就不在基础系列讲解了~有兴趣可以自行了解下!

参考资料:http://www.batxue.com/html/Androidjcjc/

【架构师小秘圈,坚持每天更新优质文章⬇️】

1
0
分享到:
评论

相关推荐

    Android移动开发基础案例教程(第2版)_PPT.zip

    另外,网络编程也是现代应用不可或缺的部分,学习者需要理解HTTP协议,使用HttpURLConnection或OkHttp进行网络请求,以及处理JSON或XML数据。 Android权限管理系统也是需要关注的,随着Android版本更新,权限管理也...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型 。 Linux 内核也同时作为硬件和软件栈之间的抽象层。 5 建立 Android Android Android Android 开发环境 ① ...

    学习爬虫需要具备的技能.docx

    学习爬虫需要具备的技能包括计算机网络、编程基础、前端开发、后端开发、App开发与逆向、网络安全、数据库、运维、机器学习、数据分析等多个方向的内容。学习爬虫需要掌握的技术栈非常广泛,涵盖了现在的一些主流...

    WhenGreen:学习android的东西

    9. **网络编程**:Android应用可能需要访问网络获取数据,这需要理解HTTP协议和使用像OkHttp这样的网络库。Android的网络权限管理也需要注意。 10. **权限管理**:自Android 6.0(API级别23)起,应用在运行时需要...

    Android-Learning:学习安卓的东西

    理解HTTP协议,掌握使用HttpURLConnection、OkHttp或Retrofit进行网络请求的方法,以及处理JSON数据的能力,是网络通信的关键。 八、权限管理 从Android 6.0(API级别23)开始,系统引入了运行时权限模型。开发者...

    java学习资料(个人觉得很不错,我的珍藏)

    5. **输入/输出(I/O)与网络编程**:这部分涵盖了文件操作和网络通信,如Socket编程,对HTTP协议的理解,以及流的概念。 6. **多线程**:Java提供了内置的多线程支持,学习如何创建和管理线程,理解和处理并发问题...

    Delphi学习宝典++++

    学习网络编程,你需要熟悉套接字编程概念和HTTP、FTP等网络协议。 图形用户界面(GUI)设计是Delphi的强项。Delphi的可视化表单设计器使得界面布局直观易懂,可以通过调整组件的位置、大小、样式来创建美观的应用...

    Android应用开发详解

    根据提供的标题“Android应用开发详解”以及描述中的信息“除了android相关知识外,没有任何其他添加的东西”,我们可以推测本文档主要围绕Android应用开发的核心知识展开。接下来,我们将详细探讨与Android应用开发...

    API的一个demo备份,预感日后一定会用到的好东西

    通过深入学习和实践这个"API的一个demo备份",开发者可以加深对Android API的理解,提升自己的编程技能,更好地应对日后的开发挑战。无论你是初学者还是经验丰富的开发者,这样的资源都值得珍藏和反复研究。

    蘑菇街teamtalk全部源码

    2. **网络编程**:实现IM系统需要深入理解TCP/IP协议栈,处理网络连接的建立、数据传输和断开等问题。 3. **多线程与并发处理**:为了处理大量的并发请求,源码中会包含多线程和并发控制机制,如锁、信号量等。 4....

    ApiDemo1.6

    1. **网络请求API**:展示如何使用HTTP/HTTPS协议进行数据交换,包括GET、POST等请求方法,以及处理JSON或XML数据格式。 2. **数据存储API**:可能包含SQLite数据库的使用,文件系统的操作,或者云同步API的集成,...

    WindowsPhonePowerTools源码

    这些都与实际开发息息相关,通过学习和借鉴,开发者可以提升自己在这些领域的专业技能,编写出更稳定、更高效的Windows Phone应用。 总之,Windows Phone PowerTools的源码是一份珍贵的学习资源,它涵盖了Windows ...

    嵌入式微处理系统(好东西)

    理解这些接口的工作原理和协议对于连接传感器、显示器、网络模块等至关重要。 系统集成是嵌入式开发的另一个关键环节。这包括电路设计、PCB布局、硬件调试,以及软件的集成测试。良好的系统集成能确保硬件和软件...

    RxRedux,基于rxjava的redux实现。.zip

    RxRedux 是一个将 RxJava 库与 Redux 架构相结合的开源项目,旨在为 Android 开发提供一种响应式状态管理的解决方案。Redux 是一个源于 JavaScript 世界的架构模式,主要用于构建可预测、可测试且易于理解的应用状态...

    代码:代码转储。 此处的代码可能会或可能不会使用

    3. Java:面向对象的编程语言,常用于企业级应用和Android开发。 4. Linux:一个开源操作系统内核,通常与Unix-like环境相关联。 5. Resume:这可能意味着代码转储中包含了一些个人项目,可能有助于展示开发者的技术...

    4160FinalProject

    7. **网络编程**:如果项目涉及到网络通信,可能会涵盖Socket编程,HTTP协议等。 8. **设计模式**:可能运用了单例、工厂、观察者、装饰者、代理等常见的设计模式来提高代码的可维护性和复用性。 9. **单元测试**...

Global site tag (gtag.js) - Google Analytics