Android之Http通信——1.初识Http协议
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浏览器与WEBserver之间交换数据的过程。
client连上webserver后,若想获得webserver中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义client与webserver通迅的格式。
②Http 1.0 与 Http 1.1的差别:
- 1.0协议。client与webserver建立连接后,仅仅能获得一个web资源!
- 1.1协议,同意client与webserver建立连接后,在一个连接上获取多个web资源!
PS:如今大部分的都是用的Http 1.1协议的~
③Http请求的工作流程:
这里先介绍两个名词,SYN和ACK
- SYN(synchronous):TCP/IP建立连接时使用的握手信号
- ACK(Acknowledgement):确认字符。确认发来的数据已经接受无误
接着说下TCP/IP三次握手的概念:
- client发送syn包(syn = j)到server,进入SYN_SEND状态,然后等待server确认
- server收到syn包,确认客户的syn(ack = j + 1),同一时候在自己也发送一个SYN包(syn=k),
即SYN + ACK包,server进入SYN_RECV状态- client收到SYN + ACK包,想server发送确认包ACK(ack = k +1),发送完毕后,client与服务端
进入ESTABLISHED状态。完毕三次握手,然后两者開始传送数据
假设你认为复杂的话,看图想想你就有个大概印象了,三次握手示意图例如以下:
Http操作的流程:
- 用户点击浏览器上的url(超链接)。Web浏览器与Webserver建立连接
- 建立连接后。client发送请求给server,请求的格式为:
统一资源标识符(URL)+协议版本(通常是1.1)+MIME信息(多个消息头)+一个空行- 服务端受到请求后。给予对应的返回信息,返回格式为:
协议版本 + 状态行(处理结果) + 多个信息头 + 空行 + 实体内容(比方返回的HTML)- client接收服务端返回信息,通过浏览器显示出来,然后与服务端断开连接;当然假设中途某步错误发生的话,错误信息会返回到client,并显示,比方:经典的404错误
好吧,No pic you say a jb,有图有真相,以下我们用HttpWatch来抓下包(当然,你也能够直接用Chrome f12),这里測试的站点是小猪学校的教务系统:输入账号password后,发送登陆请求,相关信息头。至于相关的信息头,我们下节再具体解说~:
HTTP请求包含的内容:
HTTP响应包含的内容:
④Http请求的几种方式:
我们看到上面我们发送http请求的方式是POST,它和GET在我们平时开发中使用较多,以下我们就罗列出全部的请求方式吧:
- Get:请求获取Request-URI所标识的资源
- POST:在Request-URI所标识的资源后附加新的数据
- HEAD 请求获取由Request-URI所标识的资源的响应信息报头
- PUT:请求server存储一个资源,并用Request-URI作为其标识
- DELETE:请求server删除Request-URI所标识的资源
- TRACE:请求server回送收到的请求信息,主要用于測试或诊断
- CONNECT:保留将来使用
- OPTIONS:请求查询server的性能。或者查询与资源相关的选项
好吧,除了GET和POST其它的,笔者也没用过,所以,这里仅仅区分GET和POST的差别:
- GET:在请求的URL地址后以?的形式带上交给server的数据。多个数据之间以&进行分隔,但数据容量通常不能超过2K,比方:http://xxx?
username=…&pawd=
…这样的就是GET- POST: 这个则能够在请求的实体内容中向server发送数据,传输没有数量限制
- 另外要说一点,这两个玩意都是发送数据的,仅仅是发送机制不一样,不要相信网上说的”GET获得server数据,POST向server发送数据”!!
另外GET安全性非常低。Post安全性较高,可是运行效率却比Post方法好,一般查询的时候我们用GET。数据增删改的时候用POST。!
⑤Http状态码合集:
- 100~199 : 成功接受请求,client需提交下一次请求才干完毕整个处理过程
- 200: OK,client请求成功
- 300~399:请求资源已移到新的地址(302,307,304)
- 401:请求未授权。改状态代码需与WWW-Authenticate报头域一起使用
- 403:Forbidden。server收到请求,可是拒绝提供服务
- 404:Not Found,请求资源不存在,这个就不用说啦
- 500:Internal Server Error。server发生不可预期的错误
- 503:Server Unavailable。server当前不能处理client请求。一段时间后可能恢复正常
⑥Http协议的特点
好吧。这些东西知道就能够了,小猪就不自己慢慢扣了,直接复制粘贴哈~
- 支持客户/server模式。
- 简单高速:客户向server请求服务时。仅仅需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与server联系的类型不同。
由于HTTP协议简单,使得HTTPserver的程序规模小,因而通信速度非常快。
- 灵活:HTTP同意传输随意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接仅仅处理一个请求。server处理完客户的请求,并收到客户的应答后。即断开连接。採用这样的方式能够节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。
缺少状态意味着假设兴许处理须要前面的信息,则它必须重传。这样可能导致每 次连接传送的数据量增大。还有一方面。在server不须要先前信息时它的应答就较快。
⑦OSI七层协议&TCP四层协议;
恩,这个我们知道就能够了,兴许有须要的话再深入了解,我们的HTTP请求是出于第七层:应用层的,
大家知道就能够了,另外最好记下这七层,对了,一到三层是用于创建两个网络设备间的物理连接的。
而四到七层主要负责互操作性,背熟就好,面试说不定问下呢,是吧。哈哈~
OSI七层协议图&TCP四层模型图:
另外小猪查相关资料的时候,发现一个B格更高的总结图,有兴趣的能够慢慢研究:
贴下原文链接,想刨根问底的能够看下:
总结:
好吧,由于时间比較仓促,毕竟仅仅能下班的时候写写,可能有点乱,望体谅,有时间会又一次捋一捋思路。部分内容參考的慕课网的”Android HTTP通信“视频的 内容,有兴趣能够去慕课看看。恩。最后总结下本节的东东吧:
- 介绍了下HTTP协议的一些概念、
- 简单的说了下HTTP 1.0 和HTTP 1.1的差别
- HTTP请求的流程,包含SYN和ACK的概念,TCP/IP三次握手,HTTP操作的流程,HTTP请求的几种几种方式,HTTP状态码合集,以及HTTP协议特点
- OSI七层协议图&TCP四层模型图
本节都是一些概念性的东西,了解了解就好。下一节,我们来研究不同的响应头。我们服务端通过设置不同的响应头来控制浏览器的一些行为,比方页面从定向。定时刷新。提示文件下载等,敬请期待~好了。洗澡睡觉。明天继续上班哼(ˉ(∞)ˉ)唧~
PS:刚舍友路过,问我一晚上在扣什么?写代码么,我说写博。然后他又问这能赚钱么?我说不能。然后他说,那写了有个卵用…我也不知道怎么跟他解释,每一个人的看法。价值观不同吧。我喜欢写博,虽然我不是大牛,我写出来的东西B格也没人家高。可能都是一些基础的东西。虽然如此,我还是愿意在下班吃完饭后,埋头码字一个晚上,不积跬步何以千里。持续的。坚持的努力,再加上正确的方法,小猪也有成为大牛的那一天的,另外,把摸索出来的方法写出来,又能够方便后来者。何乐而不为呢?是吧!
与各位攻城狮们共勉~加油
Android之Http通信——1.初识Http协议的更多相关文章
- Android基础_web通信
一.发展史 1G 模拟制式手机,只能进行语音通话2G 数字制式手机,增加接收数据等功能3G 智能手机,它已经成了集语音通信和多媒体通信相结合,并且包括图像.音乐.网页浏览.电话会议以及其它一些信息服务 ...
- Android开发--Socket通信
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- 基于android的Socket通信
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户 ...
- Android中Socket通信之TCP与UDP传输原理
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...
- Android网络编程(一)HTTP协议原理
相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley使用方法全解析 A ...
- Android呼叫管理服务之会话发起协议(SIP)API
原文:http://android.eoe.cn/topic/android_sdk Android提供了一个支持会话发起协议(SIP)的API,这可以让你添加基于SIP的网络电话功能到你的应用程序. ...
- Android NFC近场通信02----读写卡的准备工作
Android NFC近场通信02----读写卡的准备工作 因为公司接了一个听上去感觉比較NB的项目.给某油田做派工系统 .并由小女子负责Androi ...
- 初识HTTP协议
本篇文章从概念上初识HTTP协议,参考链接:http://www.runoob.com/http/http-tutorial.html 目录: 一.HTTP协议 HTTP 工作原理 HTT ...
随机推荐
- Linux5355端口被0.0.0.0监听
Linux后台有个systemd-resolv进程,占用5355等端口 博主在一次网络安全加固行动中,netstat -anp发现Linux后台有一个被0.0.0.0监听的端口,5355,显示被sys ...
- leetcode第一刷_Subsets II
要求子集,有很现成的方法.N个数.子集的个数是2^N.每一个元素都有在集合中和不在集合中两种状态,这些状态用[0,pow(2,N)]中每一个数来穷举,假设这个数中的第i位为1,说明当前集合中包括源数组 ...
- mysql安装,数据库连接
安装教程http://jingyan.baidu.com/article/e3c78d64412ae83c4c85f5fd.html 首先打开MySQL官网,找到Downloads标签,点击进入.如果 ...
- Laravel-redis-订阅发布
Laravel-redis-订阅发布 标签(空格分隔): php Redis订阅发布 理解订阅发布: publish:将信息 message 发送到指定的频道 channel publish test ...
- dll开发
_declspec(dllexport) void fun() { }
- xBIM 基础11 WeXplorer 常用事件
系列目录 [已更新最新开发文章,点击查看详细] 本篇将介绍查看器在不同场合触发的事件.所有这些都记录在xViewer中. 如果您从Web服务器运行本教程,可以在此处查看完整的实例.并且确保您的 ...
- xBIM 基础09 WeXplorer 基本应用
系列目录 [已更新最新开发文章,点击查看详细] 在本教程中,将学习如何创建最基本和最直接的查看器. 除了展示建筑模型外,不做其他任何操作.它将只使用内置导航,但是不会对按钮做出事件响应. &l ...
- BZOJ 2096 单调队列
思路: 偷懒用的STL //By SiriusRen #include <deque> #include <cstdio> using namespace std; struc ...
- .net中MVC Webapi多参数调用控制器方法
http://blog.csdn.net/wulex/article/details/71545471 路由 public static void Register(HttpConfiguration ...
- asp.net DataTables
无聊做一个,但是还是留下一些疑惑: 在控件中加入例如编辑,删除之类的按钮,而不是以行内元素呈现. 真实分页的实现方法. 要是有知道的朋友,希望指点一二. 下面只实现的功能: 隐藏列 冻结列 分页 列排 ...