IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> android学习之一,http基础 -> 正文阅读

[网络协议]android学习之一,http基础

# http到底是什么
### 不知道大家有没有这种感觉,当面试官或者同事问你http到底是个啥,你有时候会一顿一激灵。在项目中做了那么久,我当然知道http是啥啦,天天在用好不好,但是让你口述,你是否真的可以说的一五一十呢?反问下自己吧!这玩意必须掌握并且很容易被轻视。因为你搭建一个项目,那网络请求只需要在一开始的时候配置一次就能终生使用,那我就和大家一起来讨论下http到底是个啥。
### 其实http最直观的理解应该分为2种,第一种是游览器打开一个网页,第二种就是客户端向服务器发起网络请求,服务器返回对应的内容。这个过程其实就是http---超文本传输协议,是一种通信协议(协议你可以理解为合同,双方定好一套认可的标准内容。)(超文本,不是超级大的文本!其实超就是可以拓展的意思,超链接在word文档中你也用过,超链接就是超文本,其实就是咱们说的html。再换句活说就是html传输协议。)
# 报文体
### http会把我们常见的url拆分组装成报文体发送给服务器,报文分为,请求报文和响应报文,客户端就相当于是request和response。


上图为请求报文

?


上图为响应报文

?

### 下面我会细说这每一行的参数大致代表了啥


# http请求方式
## GET
### 读取服务器数据和网页时可以使用GET请求,他具有幂等性,说到幂等你就要问了,什么是幂等性,这里久不详细说明了,自行百度,但是可以这样理解只要数据一致就是幂等,所以除了数据增加,其他都具有幂等性。
### 通常我们知道GET其实就是一行url,举个例子 http://www.baidu.com/mine?userId=1 ?这个url没有body就可以直接使用,那么问题来了,一个GET请求能不能加Body呢,本质上是可以的,这就是咱们经常在工作中出现的问题,后端写了带有body的get请求,但是android中的retrofit用get请求带body就直接报错了,这时候你和后端就开始吵起来了,这就是规范性的问题了,后面会引出rest的内容,retrofit在一开始设计的时候就避免了这种不规范的用法。工作而已,团队的交流很重要。
## POST
### 增加或者修改数据,有了增加的操作,那这个POST必然是非幂等性,当然你需要增加和修改数据的时候,这里久显然要带上body了
## PUT
### 是用来修改数据,有body的,put只有修改数据所以是幂等性。这时候大家就要问了,那POST和PUT都有修改,那我到底用哪个呢,团队么最主要的还是交流,看你们后端用post或者put了。客户端只需要遵守纪律就行了~
## DELETE
### 删除数据,他也是有幂等性的,能不能加Body呢,其实道理和GET一样,规范来说是不行,后端强制要求加,那你也拧不过!
## HEAD
### 基本业务逻辑并不需要这种请求方式,但是确实存在,大致就是不会从服务器返回结果给你,只会给你服务器的一切基本信息,体量比较小。只做个了解一下的功能。

# 状态码
1. 1xx:临时性消息。100代表协议切换,比如http1.1和http2请求,head上upgrade:h2c返回状态码就是101,告诉客户端支持http2,请使用http2,head加 expect:100-continue代表客户端数据还没有发完,请等我一下,我还有内容需要发。
2. 2xx:成功,这个就不多说了,code为200,那说明借口访问成功,那就可以对body解析或者对status message进行下一步操作。
3. 3xx:重定向,比如301,资源永久迁移了,302临时迁移,游览器会指向loaction重新开打,安卓的okhttp也是支持自动重定向。
4. 4xx:客户端错误,服务器认为是不存在的,比如404页面不存在,但是我依然可以给你body,401未授权,auth失败等等。
5. 5xx:服务器错误,内部资源不足,空间不足,数据库连接失败等等。这里就不一一展开了,网上搜索一下一大堆错误码。毕竟3位数开头,题外话,3字头中华烟可真难买到。
# 请求头部(Header)和请求主体(Body)
## header
### 请求头部,他的作用呢其实是http消息的元数据(metadata),元数据相当于数据的数据。大概就是镜子里的镜子。哈哈,大概理解一下。相当于数据的属性。
### host:服务器地址
### 这里就说到了域名和ip的关系了,对,没错,还有dns。说的粗糙一点就是域名比较好记比较方便查看,通过域名去dns服务器查询真实ip,就是这样一个过程,但是其中的还有很多奥妙等待大家去探索。咱们今天说的这个HOST其实是去指定服务器找到对应的主机。你可以理解为一台服务器部署了很多域名服务,我用host去找我想要的域名服务。
### content-Type
1. text/html:html文本,用于游览器访问,通过游览器内核渲染页面
2. application/x-www-form-urlencoded:普通表单,纯文字表单键值队
3. multipart/form-data:Web??含有?进制?件时的提交?式。boundary用来做分界。与表单的&类似功能。
4. applicaton/json:json数据体,用于web api的响应,post,put,也是属于文本格式。
5. image/jpeg,applaction/zip等等:但是这种格式几乎没有人用,可能后端人员更喜欢multipart的方式,还有很多理由,具体不细说了。

### content-Length
### 为什么非要知道内容长度呢?长度只是为了让bady知道在哪里结束。如果是二进制的内容,比如是个换行符的二进制,那数据就已经读取错误了

### chunked transfer encoding
### 分快传输编码,header:trasnsfer-encoding:chunked,,就不存在长度了,因为不知道多长。

### user-Agent:用户代理
### 客户端,一些浏览器和手机的信息。很多网站的屏幕适配都可以根据useragent中的参数来设置,mozilla了解下它的历史。游览器的历史。

### cookie和authorization我会单独列一个章节去介绍,当然还有更多的字段,这边由于个人觉得不是那么重要,我就稍微列一下range/ACCEPT-RANGE,accept,accept-charset,accept-encoding,content-encoding,cache-control,last-modified,etag,chache-control:private/public等。

### cache:
### cache和buffer的区别,cache是缓存,我用完,一会还用,我先不扔掉,buffer是缓冲,针对工作流,上游多生产些给下游用,上游生产力大于下游消费力。


# REST是个啥
## 架构风格,一种思想,到底该怎么让http更好用,更规范。有意思的是曾经有个领导问我架构,框架,和设计模式的关系,分别是什么?这个话题很开放,大家可以自己思考

## 说白了,rest就是http,但是rest只是一个宏观的框架风格。也不是协议。为了更好实现rest,就又了restful http:正确使用http,规范问题。也就是上面我说过的后端该如何规范的设置借口。

# 点个关注咱们还是好朋友~后续还有更多知识点一一更新。


?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:49:11  更:2021-10-30 12:49:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/1 21:22:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码