HTTP基础解析

HTTP是什么

​直接翻译过来http是超文本传输协议。就是浏览器上面输入的地址,打开的网页,或者android中发送的接口返回的数据。超文本就是html,传输超文本的协议就是HTTP啦

HTTP的工作方式

基本就是客户端输入地址,请求服务器,响应返回超文本协议,然后通过客户端来渲染,展示这些数据。

URL转换成HTTP报文

请求报文

http://www.baidu.com/xxxx http是协议,www.baidu.com是host服务器地址,xxxx是路径PATH 通过GET请求发送形式如下

GET /xxxx HTTP/1.1   这个是请求行,包含请求方法 请求的路径 和HTTP的版本

请求行下面是HEADER

这行下面会有HOTS:www.baidu.com content-type content-length 啊等等,包含验证信息啥的

Header下面是请求体内容BODY get请求一般没有body

所以基本上请求的协议内容大概是下面的格式

请求行

请求HEADER

请求BODY

 

响应报文

​响应报文是服务器返回给我们的,其实跟请求行的大体格式差不多

状态行  HTTP/1.1 200 OK HTTP版本 响应码 对应请求行

响应的HEADRE 包含一些基本的头或者压缩格式等等

响应BODY这个一般是我们最常用的,返回的JSON数据就在BODY里面

响应行

响应头

响应BODY

 

请求方法

我们最常用的是post和get post提交数据代body get不带

其实按照HTTP的请求规范其实我们最长用的增删改查应该用不同的方法来表示

get post delete put 方法对应最基本的数据操作  查 增 删 改

查 和 删是幂等的操作,操作一次下一次就是一样的了。还有比较常用的方法是head方法

head跟get是很像的,差别是head不会返回请求的body,在下载的使用用这个比较多,先head请求服务器,返回下载的信息,本地做准备后在get请求下载

 

响应码

1xx

2xx

3xx

4xx

5xx

这些状态码能全部说出来具体谁什么意思的人估计很少,这个其实也是最基础的东西,我们常见的是200 和404,一个对应成功,一个是客户端错误,常见的浏览器404

我们具体说下这些码的意思

1xx 临时性消息 101/100是最常见的 一般是问支持不支持http2,支持将会返回101表示支持,客户端切换,不支持会一般返回200成功。上传大文件的时候要分成好几块传输,这时候加个header,要求服务器收到消息后返回一个确认,这个header是跟服务器说我还没发完后面还有,服务器收到这个header会返回100表示知道了,后面的你继续发,等发完后客户端就不会再发这个header了,那么服务器最好会返回一个200的标志位

2xx 这个很常见,成功的标志位

3xx 见得一般多的是301/302/304 301/302表示重定向到新的连接,304一般表示的是跟上一次请求没有什么改变

4XX 客户端错误

5XX 服务器端错误

 

Header

发送的是HTTP的元数据。

header中的第一行是HOST。我们在浏览器中输入网址回车的时候,第一步是根据域名通过DNS找到对应的主机IP,然后通过IP与主机进行通信,那么这里为什么header中要加上HOST呢,我们都拿到了主机地址了,要这个应该没什么用了啊?其实不然,一个IP是可以配多个域名的,可以叫a.com 也可以加一个b.com,如果要请求的是a.com下的内容只有IP的话服务器就懵逼了,不知道该具体从a.com找还是从b.com找了。所以必须加上host

 

常用的header

content-length 内容的长度告诉服务器应该读多长的数据

content-type 返回的数据类型。 

    text/html 文本的格式  

    application/x-www-form-urlencofed 普通的表单 eccoder URL格式,这个比较重要 在用Retrofit等网络架构的时候提交POST请求用这个注解。然后读@field注解的参数 这个就是       formUrlEncoder android就是模仿网页的表单提交的。POST表单都是把参数拼接起来放在body中传过去的,理解了这个retrofit中用POST就很好理解了。

    multipart/form-data 多部分形式,一般包含二进制文件内容。普通表单一般是传输文本的。传文件用这个。这两个都是传统网页上过渡过来的。retrofit 用这个注解multipart 然后用        @part 传输requestBody

    application/json:json 返回json数据

    image/jpeg 传输图片,直接传图片流 这个很方便,但是后端一般还是通过表单来传输。图片流用base64编码然后通过post传输正常的表单文本

    content-type非常之重要上面提到的一般常用的type一定要会

Transfer-Encoding;chunked

    服务器返回的数据比较大不能一下全返回,为了响应速度,先返回一部分通过这个来进行分块的传输。分块传输不知道具体的文件有多长。content-length不能使用。格式如下:

   Body:

   <length1>

   <data1>

   <length2>

   <data2>

  0

  (最后传输0表示内容结束)

Location 重定向的URL目标 301/302用

User-Agent 用户代理可以定制客户端的来源

Range/Accept-Ranget 支持分断流时候用可以请求一部分的内容 比如请求图片的一半返回 Accept-ranger表示服务器支持分断,客户端的header 加Ranger可以指定从哪返回数据,一半用于断点续传

Cookie 做埋点功能

AUTHORIZATION 授权信息,服务器根据这个判断权限

Cache 缓存

Buffer 缓冲

Cache-Control:no-cache 可以缓存 no-store不可以缓存 max-age过期时间 private/public 中间节点是否帮助缓存(路由器网关)

 

基本了解了上面这些内容,在android中对网络请求这块就能胜任了

 

结语:感谢hencoder 感谢扔物线凯哥

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值