当前位置: 首页 > article >正文

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

// 对应 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--

// 对应 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"}

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

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

后续更新中...


http://www.kler.cn/a/539611.html

相关文章:

  • 白嫖RTX 4090?Stable Diffusion:如何给线稿人物快速上色?
  • 深度学习|表示学习|Instance Normalization 全面总结|26
  • 电脑重启后vscode快捷方式失效,找不到code.exe
  • 编程式路由
  • 多光谱成像技术在华为Mate70系列的应用
  • Qt元对象系统
  • spark技术基础知识
  • 前端工程化-vue项目
  • Ubuntu18.04安装DeepSeek
  • 【Linux网络编程】谈谈网络编程中的select、poll、epoll、Reactor、Proactor模型(下)
  • BiGRU双向门控循环单元多变量多步预测,光伏功率预测(Matlab完整源码和数据)
  • 基于STM32的智能鱼缸水质净化系统设计
  • Git 的高级配置与优化
  • Vue笔记(五)
  • 【RabbitMQ的重试配置retry】重试配置不生效原因
  • 火语言RPA--XML提取
  • 【C++】解锁<list>的正确姿势
  • 基于改进型灰狼优化算法(GWO)的无人机路径规划
  • 5. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Nacos
  • Flink-初识
  • DeepSeek 大模型每个版本的特点以及运用场景对比
  • PySide(PyQT)使用场景(QGraphicsScene)进行动态标注的一个demo
  • 【Java报错已解决】java.lang.UnsatisfiedLinkError
  • MongoDB 有哪些特性
  • 尚硅谷课程【笔记】——大数据之Zookeeper【一】
  • ansible使用学习