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

后续更新中...

相关推荐
liuweidong080211 分钟前
【Pandas】pandas Series std
前端·数据库·pandas
椒盐味花生米19 分钟前
基于 React Flow 的可视化工作流
前端·react.js
张声录11 小时前
DeepSeek本地化部署【window下安装】【linux下安装】
linux·运维·服务器
关山月1 小时前
理解 Vue 3 组合式 API
前端
hx_11991 小时前
ES6-代码编程风格(数组、函数)
前端·javascript·es6
还是鼠鼠1 小时前
使用 Axios ——个人信息修改与提示框实现
前端·javascript·vscode·ajax·bootstrap·css3·html5
HaoHao_0102 小时前
AWS 上的 Red Hat OpenShift 服务
服务器·数据库·云计算·aws·云服务器
计算机-秋大田2 小时前
基于Spring Boot的图书个性化推荐系统的设计与实现(LW+源码+讲解)
java·前端·spring boot·后端·spring·课程设计
我不当帕鲁谁当帕鲁2 小时前
arcgis for js范围内天地图高亮,其余底图灰暗
前端·javascript·arcgis
℡52Hz★2 小时前
Node.js中http模块(二)
网络·网络协议·http·node.js