从HTTP讲起
零蚀
- HTTP 是什么
- HTTP 工作原理
HTTP 是什么
-
Http简介
- 日常生活中,我们觉得它是网址,是IP地址是
- Android中我们认为它是一种请求,当我们发送请求时,返回对应的内容
- 百度说:http是一个简单的请求-响应协议,它通常运行在TCP之上
从字面上解释HTTP是HyperText Transfer Protocol 超文本传输协议,
协议的存在的价值,是为了双方的沟通的rule。- HyperText 超文本,是使用超链接的方式将不同空间的文字信息组建在一起的网状文本(就是一个能点击跳转的的链接文本)。一般超链接=超文本
- HyperText = < html >,是一种文本格式。
HTTP 工作原理
Http结构
-
URL
日常用的网址【https 😕/ www . baidu .com / s?wd=超文本&rsv_spt=1…】 http:是协议类型,www.baidu.com是服务器地址,s?wd=超文本&rsv_spt=1…是服务器接收的路径。
-
Http格式
- 请求报文格式 Request :请求行:[GET /users HTTP/1.1/ ] (方法,路径,http版本) Headers:[Host:www .baidu.com…Content-type…]body:[content]
- 响应报文格式Response :状态行:[http/1.1 200 ok(状态码和状态信息)] Headers:[格式同请求头基本一致],body:[content]
-
Http 请求方法
- GET 获取资源,没有body。
- POST 增加修改内容,有body。链接中会出现s?wd=超文本&rsv_spt=1的增加内容
- PUT 只用来修改,有body,幂等GET
- DELET 删除资源,没有body 案例:[DELETE users/1 HTTP/1
- HEAD 类似GET 区别在于服务器请求,有返回内容但不包括body。常用于下载
- TRACE 诊断
- OPTION 查看服务器性能
- CONNECT 将链接改为管道方式的代理服务器
-
状态码
- 1XX: 临时信息,(分段传输)
- 2XX: 成功
- 3XX: 重定向,发现链接被改动,浏览器会自动再次去请求正确网址,比如,http的请求方式被改动,利于搜索引擎优化。刷新(304内容没有改变)
- 4XX: 客户端错误、请求有问题、
- 5XX: 服务器错误
-
Header
Header用来传递http的元数据(metadata) , 数据的数据,比如说,数据的长度,数据的样式,数据的压缩量,数据的格式,象征着数据属性的这一类数据叫做元数据。
-
host 服务器地址,报文在拼接好信息(请求头host)已经开始寻址了,通过DNS(域名)返回的ip地址进行寻址,而ip地址服务器下面可能会有多个服务器,一个服务器下面可能有很多主机,很多虚拟主机,而它们公用同一个IP地址,无法转达到具体的主机。所以要附送主机地址。
-
content-length 内容的长度。
-
content-type 例如application/json 返回的网页的格式,不同的格式展示的样式不同。 第一种 text/html 文本,用于浏览器的页面响应, 第二种 application/x-www-form-urlencoded 普通表单(提交信息网页),encoded code 格式,只能传文本或者二进制数据。Retrofit中的@FormRrlEncode注解也是由来于此。 第二种的另一类multiparty/from-data 多部分形式,比如说二进制文件。boundary=----WXXXX是分界线,使用方法对应Retrofit中的@Multipat注解。
-
Chunked Transfer Encode
分块传输编码,有时候服务器提供给个护短的数据,暂时只能给一部分内容,不知道具体内容的content-length,所以Body无法确定,一般没有长度的内容解析,会出现问题,所有使用分段传输这种方式,数据内容读到 0\n 位置表示内容结束。
-
Location
表示重定向目标URL,例如返回301的,重新定位的内容就是在location之中。
-
User-Agent (用户代理)
-
Range/Accept-Range
指定Body的内容范围,当浏览器支持分段获取数据时候,支持分段续传,多线程下载。
-
Accept 客户端能接受的数据类型
-
Accept-Charset 例如text/html
-
Accpet-Encoding 压缩编码类型,如gzip
-
Content-Encoding 压缩类型
-
-
Cache 和 Buffer
-
cache 缓存,cache映射表结构是【有效位| 标记块|快內数据】,因为CPU的速度是远远大于主存的,所以需要用到cache来更快的访问到在主存中访问的数据,所以应用将主存信息映射到cache中。一般用于循环的数据,将加载过的数据存放在cache中,以便查表再找。
-
Buffer 缓冲, 针对工作流,有上下游的关系,也是硬件的速度不均的问题导致缓冲的出现。例如:下载大文件时,如果下载速度和写入硬盘的速度不均衡,可以把多出来的先存缓冲中再写入。
-
-
Cache-Control(了解----Header)
- no-cache 可以缓存,再次使用时需要来问资源是否失效,可以缓存。
- no-store 不缓存
- max-age 到失效期之前,绝对有效
- last-Motified 最近改变的时间
- if-Motified-Since 是否改动过
- Etag 服务器提取的指纹信息
- private/public 服务器提示是否需要缓存的定制化个性信息。
-
REST(具体内容见下)
作用是约束了整个Http的风格架构(里面的参数也是常用限制http的参数,像传个数据,得返回个响应回来etc.),RESTful HTTP (这里就是‘正确使用HTTP’的意思,并没有链接里面说的辣么复杂)具体内容见下链接:
网络篇后续正式内容:加密,,授权(Https,TCP/IP),,从Retrofit看HTTP ,Ok,热更新,Rx etc.穿插专题,网络篇的后续内容将不开放,大概在20天左右结束。
🔗 前言
🔗 Android 网络列表
🔗 NO1.加密-授权-协议
🔗 NO2.Retrofit和Http
🔗 NO3.从OkHttp看Http
🔗 NO4.剖析RxJava2