目录
application/x-www-form-urlencoded:普通表单
multipart/form-data; boundary=------:多部分形式,一般用于传输包含二进制内容的多项内容
application/json:json形式,用于Web Api的响应或POST/PUT请求
image/jpeg / application/zip ...:二进制单文件
Chunked Transfer Encoding:分块传输编码
Range / Accept-Range:指定Body的内容范围
Cookie / Set-Cookie:发送Cookie / 设置Cookie
Accept:客户端能接受的数据类型。如 text/html
Accept-Charset:客户端接受的字符集。如 utf-8
Accept_Encoding:客户端接受的压缩编码类型。如 gzip
一、HTTP是什么
HyperText Transfer Protocol 超文本传输协议
超文本(HTML):在电脑中显示的、含有可以指向其他文本的链接的文本
二、工作方式
浏览器:
⼿机 App:
三、报文格式
请求报文:Request
响应报文:Response
四、请求方式
GET
对应Retrofit代码:
@GET("/users/{id}")
Call<User> getUser(@Path("id") String id,
@Query("gender") String gender);
POST
对应Retrofit代码:
@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name,
@Field("gender") String gender);
PUT:
对应Retrofit代码
@FormUrlEncoded
@PUT("/users/{id}")
Call<User> updateGender(@Path("id") String id,
@Field("gender") String gender);
DELETE
对应Retrofit代码
@DELETE("/users/{id}")
Call<User> getUser(@Path("id") String id,
@Query("gender") String gender);
HEAD
用于获取信息;由于响应没有Body,响应比GET快,可在GET请求前进行一次HEAD请求
五、状态码
作用:对结果做出类型化描述(如「获取成功」「内容未找到」)
六、Header
作用:HTTP消息的元数据(metadata:数据的属性,描述数据的数据)
Host:服务器主机地址
作用:1.通过DNS查找目标主机IP
2.查找到目标主机后定位子主机
Content-Type:内容的类型
text/html:html文本,用于浏览器页面响应
application/x-www-form-urlencoded:普通表单
对应Retrofit代码
@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name,
@Field("gender") String gender);
multipart/form-data; boundary=------:多部分形式,一般用于传输包含二进制内容的多项内容
对应Retrofit代码
@Multipart
@POST("/users")
Call<User> addUser(@Part("name") RequestBody name,
@Part("avatar") RequestBody avatar);
...
RequestBody namePart =
RequestBody.create(MediaType.parse("text/plain"),
nameStr);
RequestBody avatarPart =
RequestBody.create(MediaType.parse("image/jpeg"),
avatarFile);
api.addUser(namePart, avatarPart);
application/json:json形式,用于Web Api的响应或POST/PUT请求
对应Retrofit代码
@POST("/users")
Call<User> addUser(@Body("user") User user);
...
// 需要使⽤ JSON 相关的 Converter
api.addUser(user);
image/jpeg / application/zip ...:二进制单文件
对应Retrofit代码
@POST("users/{id}/avatar")
Call<User> updateAvatar(@Path("id") String id, @Body
RequestBody avatar);
...
RequestBody avatarBody =
RequestBody.create(MediaType.parse("image/jpeg"),
avatarFile);
api.updateAvatar(id, avatarBody)
Chunked Transfer Encoding:分块传输编码
Transfer-Encoding:chunked
表示Body长度无法确定,Content-Length不能使用
目的:在服务端还未获取到完整内容时,更快对客户端做出响应,减少用户等待
Location:重定向到目标URL
User-Agent:用户代理
作用:⽤户代理,即是谁实际发送请求、接受响应的,例如⼿机浏览器、某款⼿机 App。
Range / Accept-Range:指定Body的内容范围
作用:断点续传;多线程加载(例如迅雷)