安卓网路编程-http协议
学习android网络编程相关的知识前,我们先学习一下http协议
之前有一篇文章,是java网络编程,大家可以看看
看完上面这篇文章,你就知道了我们今天要了解的Http是在OSI模型的哪一层了。最接近用户那一层,对吧!
什么是http协议?
谁定义的我们就不管了,我们了解一下重点内容就好了。
http是什么意思?HyperText Transfer Protocol 翻译过来就是超文本传输协议
协议就是约定的意思,内容是Http相关的格式
http协议是基于TCP/IP协议之上的应用层协议
http工作流程
客户端发起一个请求,然后服务器处理请求,做出响应。
这个流程是一定的,换句话说,请求一定是客户端请求,响应一定是服务端响应。不可以是服务端向客户端发起请求,也不可以是客户端做出响应。
ETC:那有没有特殊案例呢?比如说,这个服务器跟另外一个服务器通过http请求。
这种情况是有的,但是当发起请求那一刻,你就要把它看成客户端了。
这是充要条件
客户端=>发起请求,发起请求=>客户端
响应结果=>服务端。服务端=>响应结果
http不保存状态
当一个请求,一个响应完成时,那么一个http的请求就完成了。当然也有特殊情况,就是无网了,你发不起请求。然后服务器处理超时了,你也得不到结果。
http是无状态协议,什么意思呢?也就是不保存状态。一次请求完成后,下一次再发起请求,又是新的。该设置什么内容设置什么内容,要给什么参数给什么参数。
http无状态,那怎么知道这个请求用户已经登录了呢?登录状态保存在哪里呢?所以就引入了cookies这个东西了。在cookies里可以保存一个令牌,每次请求的时候,把这个令牌作为参数给服务器校验,这样子就可以知道这个用户的登录状态啦。
http的8种请求方式
- get
- post
- put
- delete
- head
- trace
- options
- connect
作为android开发人员知道前面四个就够了。
通常情况下:
get:用于请求数据 post:用于提交数据 put:用于更新数据 delete:用于删除数据
同一个接口,不同的请求方式作用就不一样了
另外,同学们了解一下restful
比如说我要这是服务器后台文章的接口地址:
baseUrl=api.sunofbeaches.com
请求文章的CRUD接口
- 请求:/article/{articleId} 请求方式:get请求
- 删除:/article/{articleId} 请求方式:deleted请求
- 更新:/article/{articleId} 请求方式:put请求
- 提交(发表文章):/article/ 请求方式:post请求
http响应码
响应码,说明是服务器给客户端结果码
同学们应该见过404吧,见过400吧,见过500吧!
这些都是什么意思呢?
404,也就是4xx,4开头的,表示服务器无法请求
而5开头的,比如说500,服务器崩溃了,服务器的问题
其他的请看上图吧!
http请求格式
当我们使用http向服务器发起一个请求时,它的格式是怎么样子的呢?
首先这个请求是包含了:
- 请求行
- 请求头
- 空行
- 请求体
比如说我们用fiddler抓个get请求看看
为什么没有请求正文呢?哈哈,这个是get请求,没有请求正文呢!
我们再看看post或者put请求
这个就有了吧!我在审核文章,审核通过携带的信息,put请求。
稍微再细看一下吧!
请求行
格式:
请求头
- Host 要访问的主机
- Connection 连接保持,http1.1有,1.0没有这个。keep-alive可以提高效率,在一定时间里不断开tcp连接,进行下一个请求
- Content-Length 内容长度,指的是后面请求正文的数据长度
- Accept 响应内容格式,也就是返回内容格式
- Origin 这个是源(不是标准http里的内容,因为我访问用的是chrome,是chrome加的)
- User-Agent 用户客户端相关的信息,比如说浏览器呀,操作系统信息之类的
- Content-Type 提交的内容类型,我提及的是json,编码是utf-8
- Referer 来源,访问入口,比如说你在搜索引擎百度里搜索阳光沙滩,进入到网站,那么这个来源就是百度了
- Accept-Encoding 响应内容的编码格式
- Accept-Language 响应内容的语言
- Cookie cookies
请求体
{"state":"0","msg":"审核通过."}
请求正文内容
http响应格式
- 响应行
- 响应头
- 空行
- 响应体
http协议了解这些就够了,从下一篇文章开始我们就通过这个来访问网络了。在android应用里发起访问,请求网络数据。