Http ( Hypertext Transfer Protocol 超文本传输协议 )

Http ( Hypertext Transfer Protocol 超文本传输协议 )

简单来说两个人说话用同样的语言即可沟通,计算机之间说话(传数据)同样需要规定协议

如果没有协议计算机之间不知道怎么传输数据,通信双方可以按照协议传输数据

HTTP工作方式

在浏览器输入链接回车可以看到网页(输入网址回车后,向服务器发送请求,服务器收到请求后给浏览器响应,浏览器得到响应报文渲染页面)

整个过程可以理解为通信双方传输报文的过程

包括 Android/iOS 发送网络请求,返回数据同理

URL格式

https://baidu.com/users/?name=liyanhong

整个URL分为三部分,协议类型,服务器地址(和端口号),路径

https 协议类型

baidu.com 服务器地址

name=liyanhong 路径

报文

请求报文

响应报文

最常用的请求方法:GET / POST / PUT / DELETE

GET:获取资源;没有 Body( 不发送 Body ),对服务器数据不进行修改;

POST:增加或者修改资源;有 Body ,发送给服务器的内容在 Body 里面(不具有幂等性)

PUT:修改资源;有 Body ,发送给服务器的内容在 Body 里面(具有幂等性)

DELETE:删除资源;没有 Body( 不发送 Body ) (虽然也算修改资源,但没有 Body)

Status Code ( 状态码 ):

1** 临时性消息 。

2** 成功。常用:200(OK),201(创建成功)

3** 重定向。

4** 客户端错误。常用:400(客户端请求错误),401(认证失败),403(被禁止),404(找不到内容)

5** 服务器错误。常用:500(服务器内部错误)

Header ( HTTP 消息的元数据 )

Host :目标主机

Content-Type:指定 Body 的类型。主要四类:

① text/html 请求 Web 页面返回响应的类型,Body 中返回 html 文本;

② x-www-form-urlencoded Web 页面纯文本表单的提交方式。

格式如下:

POST /users/emails HTTP/1.1

Host: api.github.com

Content-Type: application/x-www-form-urlencoded

Content-Length: 27

name=zhangsan&sex=man

Kotlin 复制代码
// 对应 Retrofit 代码:
// Post请求如果需要在头部添加@FromUrlEncoded注解,表示请求实体是一个From表单
// 每个键值对都需要使用@Filed注解,使用@Filed添加参数,这是发送Post请求时,
// 提交请求的表单字段,必须要添加,而且需要配合@FromUrlEncoded使用
@FormUrlEncoded
@POST("/users/emails")
Call<UserBean> addUser(@Field("name") String name,@Field("sex") String sex);

// @FieldMap   请求参数注解,与Field作用一致,用于不确定表单参数
@FormUrlEncoded
@POST("user/emails")
Call<ResponseBody> getPostData(@FieldMap Map<String, Object> map);

③ multipart/form-data

POST /userform/update HTTP/1.1

Host: api.github.com

Content-Type: multipart/form-data; boundary=----

WebKitFormBoundary7MA4YWxkTrZu0gW

Content-Length: 2382

------WebKitFormBoundary7MA4YWxkTrZu0gW

Content-Disposition: form-data; name="name"

rengwuxian

------WebKitFormBoundary7MA4YWxkTrZu0gW

Content-Disposition: form-data; name="avatar";

filename="avatar.jpg"

Content-Type: image/jpeg

JFIFHHvOwX9jximQrWa......

------WebKitFormBoundary7MA4YWxkTrZu0gW--

Kotlin 复制代码
// 对应 Retrofit 代码
// @Multipart 表示请求实体是一个支持文件上传的表单,需配合@Part和@PartMap使用,适用于文件上传
// @Part 用于表单字段,适用于文件上传情况,
// @Part支持三种类型:RequestBody、MultipartBody.part、任意类型
// @PartMap   用于多文件上传,与@FieldMap和@QueryMap使用相似

@Multipart
@POST("userform/update")
fun updatePersonalInfo(@Part file: MultipartBody.Part,@QueryMap map: HashMap<String, Any>): Observable<PersonalInfoBean>

④ application/json(json形式),image/jped,application/zip ...

POST /user/getUserForm HTTP/1.1

Host: api.github.com

Content-Type: application/json; charset=utf-8

Content-Length: 38

{"name":"zhangsan","sex":"man"}

Kotlin 复制代码
// 对应 Retrofit 代码
// 使用于Post请求的还有一个注解@Body,@Body可以传递自定义类型数据给服务器
// 多用于post请求发送非表单数据,比如用传递json格式数据、hashMap、实体类等等
// @Body注释不能用于表单或者支持文件上传的表单的编码
// 不能与@FormUrlEncoded和@Multipart注解同时使用,否则会报错
@POST("userform/getUserForum")
fun queryPersonalInfo(@Body user:User): Observable<UserlInfoBean>

Content-Length:指定 Body 的字节长度

后续更新中...

相关推荐
键盘不能没有CV键19 小时前
【图片处理】✈️HTML转图片字体异常处理
前端·javascript·html
yantuguiguziPGJ19 小时前
WPF 联合 Web 开发调试流程梳理(基于 Microsoft.Web.WebView2)
前端·microsoft·wpf
大飞记Python20 小时前
部门管理|“编辑部门”功能实现(Django5零基础Web平台)
前端·数据库·python·django
tsumikistep21 小时前
【前端】前端运行环境的结构
前端
你的人类朋友21 小时前
【Node】认识multer库
前端·javascript·后端
Aitter21 小时前
PDF和Word文件转换为Markdown的技术实现
前端·ai编程
mapbar_front1 天前
面试问题—上家公司的离职原因
前端·面试
昔人'1 天前
css使用 :where() 来简化大型 CSS 选择器列表
前端·css
昔人'1 天前
css `dorp-shadow`
前端·css
流***陌1 天前
扭蛋机 Roll 福利房小程序前端功能设计:融合趣味互动与福利适配
前端·小程序