Android之Http通信——1.初识Http协议

引言:


今天是六一儿童节,先在这里给各位超龄儿童说声节日快乐哈~( ╯□╰ ),小猪也象征性地给群里的小朋友们派了红包…嗯,忙碌的五月终于过去了,做毕设,写论文,拍毕业照,答辩,辞职,各种各样的事,也算忙完了,好吧,小猪现在又在一家新的公司上班了,第三间公司了,你们肯定会觉得小猪三心二意是吧,毕竟才差不多毕业就换了那么多家公司,然后可能问我,”小猪你什么时候跳第四间公司”,哈哈,应该不会了哈,怎么说呢,其实我还是很专一的,毕竟我才刚毕业,我还暂时不需要去养家糊口,赡养老人,而且我没女朋友,哈哈~所以趁着年轻,选择适合自己的生长的土壤,学多点本事,工资其实没什么,真的,能学到东西才是关键,等真正有本事了,那个时候就可以谈工资了,比如我这个公司的大牛(不过这周已跳槽到魅族了),第一次感觉到大牛的气息,B格真心高,自愧不如,人家自己写组件,推送,各种代码封装,各种设计模式,而且会服务端,测试,IOS…有点看小说里,一个刚入门的小学徒看到一个宗师级别的高手时那种感觉,曾经,小猪自卑了几天,一直在想,我真的能接手他的项目吗?或者说看懂他代码?又或者我能否写出这样的代码?那几天,整个人都很浮躁,各种负面情绪,连代码都看不进去;后来不经意看到了一个讲设计的TED演讲,标题是:《如何成为一名优秀的设计师:罗子雄》,这个虽然不是说编程的,但是其实很多东西都是相通的,分为两个阶段:入门&准专业级,”你们希望你们希望成为一名设计师,但不止如此,你们希望成为的是一名优秀的设计师。但没有人生下来就是优秀的,没有人生下来就是牛逼的,没有人生下来就会UI设计,会平面设计,会网页设计。”,从入门到准专业级,我们需要多少经验?”格拉德威尔在《异类》一书中指出:“人们眼中的天才,并非卓越非凡,而是付出了持续不断的努力,一万小时的锤炼是任何人从平凡变成超凡的必要条件。”一万小时,也就是说你每天工作8小时的时间,每周工作5天,你需要5年。你无需天才,无需智商过人,无需三头六臂,无需头上长角,你只需要持续的、坚持的努力,有正确的方法,就能够在设计领域,一个专业中独当一面。”看完,整个人就阔让开朗了,心也就静下来了,对啊,人家做多久,我做多久了?人家做五年了,我只是个刚毕业的实习生,不会很正常啊,很多东西,急不来,每天有规划,一步一个脚印,日积月累,坚持5年,或者不用,我也能成为一个准专业级的大牛是吧,所以何必自卑呢~恩呢,心灵鸡汤的东西就讲这么多吧,喝多了酒没作用了,视频还是不错的,有兴趣可以看看哈,好了,从今天开始小猪会在学习公司项目的同时总结相关的一些东西,然后分享给大家,第一个章节讲解的是Android中的Http通信,先叙述下Http相关的一些概念,然后讲下Android上发送Http请求的两种方式:HttpUrlConnection与HttpClient,然后使用retrofit框架封装我们的HTTP请求,最后用RxJava实现响应式编程,实现网络的异步请求调用,当然小猪也是在学习当中,如果有什么写得不对的地方,欢迎指出,万分感激~


正文:

1.Http是什么鬼?

①名词解析:

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

②Http 1.0 与 Http 1.1的区别:

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

PS:现在大部分的都是用的Http 1.1协议的~

③Http请求的工作流程:

这里先介绍两个名词,SYN和ACK

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

接着说下TCP/IP三次握手的概念:

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

如果你觉得复杂的话,看图想想你就有个大概印象了,三次握手示意图如下:

Http操作的流程:

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

好吧,No pic you say a jb,有图有真相,下面我们用HttpWatch来抓下包(当然,你也可以直接用Chrome f12),这里测试的网站是小猪学校的教务系统:输入账号密码后,发送登陆请求,相关信息头,至于相关的信息头,我们下节再详细讲解~:

HTTP请求包含的内容:

HTTP响应包括的内容:

④Http请求的几种方式:

我们看到上面我们发送http请求的方式是POST,它和GET在我们平时开发中使用较多,下面我们就罗列出所有的请求方式吧:

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

好吧,除了GET和POST其他的,笔者也没用过,所以,这里只区分GET和POST的区别:

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

⑤Http状态码合集:

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

⑥Http协议的特点

好吧,这些东西知道就可以了,小猪就不自己慢慢扣了,直接复制粘贴哈~

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

⑦OSI七层协议&TCP四层协议;

恩,这个我们知道就可以了,后续有需要的话再深入了解,我们的HTTP请求是出于第七层:应用层的,
大家知道就可以了,另外最好记下这七层,对了,一到三层是用于创建两个网络设备间的物理连接的,
而四到七层主要负责互操作性,背熟就好,面试说不定问下呢,是吧,哈哈~

OSI七层协议图&TCP四层模型图:

另外小猪查相关资料的时候,发现一个B格更高的总结图,有兴趣的可以慢慢研究:

贴下原文链接,想刨根问底的可以看下:

OSI七层模型详解

总结:

好吧,因为时间比较仓促,毕竟只能下班的时候写写,可能有点乱,望体谅,有时间会重新捋一捋思路,部分内容参考的慕课网的”Android HTTP通信“视频的 内容,有兴趣可以去慕课看看,恩,最后总结下本节的东东吧:

  1. 介绍了下HTTP协议的一些概念、
  2. 简单的说了下HTTP 1.0 和HTTP 1.1的区别
  3. HTTP请求的流程,包括SYN和ACK的概念,TCP/IP三次握手,HTTP操作的流程,HTTP请求的几种几种方式,HTTP状态码合集,以及HTTP协议特点
  4. OSI七层协议图&TCP四层模型图

本节都是一些概念性的东西,了解了解就好,下一节,我们来研究不同的响应头,我们服务端通过设置不同的响应头来控制浏览器的一些行为,比如页面从定向,定时刷新,提示文件下载等,敬请期待~好了,洗澡睡觉,明天继续上班哼(ˉ(∞)ˉ)唧~

PS:刚舍友路过,问我一晚上在扣什么?写代码么,我说写博,然后他又问这能赚钱么?我说不能,然后他说,那写了有个卵用…我也不知道怎么跟他解释,每个人的看法,价值观不同吧,我喜欢写博,尽管我不是大牛,我写出来的东西B格也没人家高,可能都是一些基础的东西,尽管如此,我还是愿意在下班吃完饭后,埋头码字一个晚上,不积跬步何以千里,持续的,坚持的努力,再加上正确的方法,小猪也有成为大牛的那一天的,另外,把摸索出来的方法写出来,又可以方便后来者,何乐而不为呢?是吧!与各位攻城狮们共勉~加油

Android之Http通信——1.初识Http协议相关推荐

  1. 基于Android和WI-FI通信的智能家居系统

    针对传统智能家居系统存在的操作复杂.可移动性差.升级维护成本高等缺点,本文提出了一种基于Android的智能家居系统的设计和实现方案.采用了具有Android操作系统的智能手机或平板电脑作为家居控制终 ...

  2. Android PC投屏简单尝试- 自定义协议章(Socket+Bitmap)

    代码地址 :https://github.com/deepsadness/MediaProjectionDemo 效果预览 投屏效果预览 简单说明: 使用Android MediaProjection ...

  3. android音频口通信——2FSK信号调制

    android音频口通信--2FSK信号调制 分类: Android2013-06-11 02:17 3125人阅读 评论(3) 收藏 举报 android音频口通信(一)--2FSK信号调制 转载请 ...

  4. Android的USB通信(AOA连接)

    USB 主机和配件概览 Android 通过 USB 配件和 USB 主机两种模式支持各种 USB 外围设备和 Android USB 配件(实现 Android 配件协议的硬件).在 USB 配件模 ...

  5. DLT645协议解析(一)---初识 DLT645协议

    (一)初识 DLT645协议              DLT645协议是一种国内电表远传协议,与Modbus协议类似,采用请求应答式交互模型,采集器和电表一问一答进行通信,电气层可以是经典的RS48 ...

  6. 【深入理解 android telephony 系列第一集 初识telephony】

    深入理解 android telephony 深入理解 android telephony 系列第一集 初识telephony 1. 概述 2. Android Telephony 框架 3. And ...

  7. 小白看完都学会了!Android跨进程通信导论,附答案

    作为一个3-5年的Android工程师,我们经常会遇到这些瓶颈: 1.技术视野窄 长期在小型软件公司,外包公司工作,技术视野被限制的太厉害 2.薪资提升难 初中级Android岗位薪资上升空间有限,基 ...

  8. Android 系统应用-通信应用-网络质量判断(通信信号、信号强度、信号质量和频段等概念解释说明)

    一.前言 如何知道当前的网络质量? 上层如何判断APP数据刷新失败是网络问题还是APP本身的问题? 注:本篇主要侧重于概念的介绍,也会带入一些思考. 二.相关基础专业词汇介绍 dB 分贝(deci-b ...

  9. Android网络编程(一)HTTP协议原理

    相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley用法全解析 And ...

  10. 新大陆物联网-Android实现网关功能-连接云平台并上传传感器数据-获取执行器指令并执行-Android网关开发-通信-数据上传云平台-JAVA原理讲解-免费云平台使用-竞赛2022国赛真题

    目录 一.任务要求 二.开发环境 三.网关上线 四.数据上传与命令下发 五.JSON命令解析思路 六.总结 一.任务要求 我们将要实现的效果是:Android开发平板与Lora板进行有线串口通信,解析 ...

最新文章

  1. 美团技术面1小时,我看出了和月薪3w的差距
  2. 2020下半年新机最新消息_2020年下半年新机看点汇总:最看好的还是麒麟1020处理器!...
  3. 深入理解Linux内核之主调度器
  4. 巧用VC工程下的rc文件
  5. uniapp /deep/设置uni-app组件样式时 h5生效 小程序失效问题解决
  6. 数据库高级知识——查询截取分析(一)
  7. 智慧城市_城市大脑:加速构建智慧城市
  8. TechWorld2021技术嘉年华,解锁“不一样”的技术盛会
  9. 2011年最后一小时
  10. 查看matlab当前路径,MATLAB R2012a 的当前路径和路径搜索
  11. Java零拷贝四步曲——HeapByteBuffer与DirectByteBuffer
  12. linux是ubuntu还是centos
  13. mysql存储过程详细教程
  14. PHP设计模式——适配器模式
  15. 我的天!你竟然不会用IDEA远程调试Tomcat...
  16. demo连接php,PHP获取网页所有连接的方法(附demo源码下载)
  17. “流动书库”藏书汇总,欢迎借阅
  18. oracle拆分分区语法详解大全_Oracle分区表详解
  19. 神威太湖之光入门指南
  20. 图漾科技招聘|机器视觉算法、嵌入式驱动开发高级工程师等岗位

热门文章

  1. iptv服务器制作 php,DIY点播服务器
  2. AM3352的I2C驱动与传感器sht20的应用
  3. 王阳明:志不立,天下无可成之事
  4. xp系统远程计算机需要网络打印机驱动,xp系统如何设置网络打印机共享
  5. 普通硬盘和固态硬盘的区别?
  6. 数据处理可视化的最有价值的 50 张图 (上)
  7. 全球区域区号plist列表(跟微信区号列表数据一致)
  8. 盒式滤波器BoxFilter
  9. 持续降库纯碱增仓大涨,沪铝认购小涨,螺纹10-01季节性正套2022.5.19
  10. 数据库三范式和BCNF范式的理解:生动举例