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 的字节长度

后续更新中...

相关推荐
晚枫歌F19 小时前
Dpdk介绍
linux·服务器
web小白成长日记19 小时前
企业级 Vue3 + Element Plus 主题定制架构:从“能用”到“好用”的进阶之路
前端·架构
APIshop20 小时前
Python 爬虫获取 item_get_web —— 淘宝商品 SKU、详情图、券后价全流程解析
前端·爬虫·python
风送雨20 小时前
FastMCP 2.0 服务端开发教学文档(下)
服务器·前端·网络·人工智能·python·ai
XTTX11020 小时前
Vue3+Cesium教程(36)--动态设置降雨效果
前端·javascript·vue.js
LYFlied21 小时前
WebGPU与浏览器边缘智能:开启去中心化AI新纪元
前端·人工智能·大模型·去中心化·区块链
Setsuna_F_Seiei21 小时前
2025 年度总结:人生重要阶段的一年
前端·程序员·年终总结
model200521 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
yuhaiqun198921 小时前
学服务器训练AI模型:5步路径助力高效入门
运维·服务器·人工智能·笔记·机器学习·ai
阿杰 AJie1 天前
主流传输 /通信协议的【使用场景 + 详细使用说明】大全
服务器·tcp/ip