HTTP的概念,原理,工作机制,数据格式
HTTP到底是什么
用于传输超文本的协议,以前是HTML,现在也包括Web API的数据
HTTP
HTTP超文本传输协议,和HTML(超文本标记语言)一起诞生,用于在网络上请求和传输HTML内容
HTTP工作模型
客户端按需求组装HTTP报文–发送给服务器—服务器处理后得到响应报文–发送给客户端–客户端处理响应报文
URL格式
三部分:协议类型,服务器地址(端口号),路径(path)
http://baidu.com/users?name=li
报文格式
请求报文
响应报文
Request Method
GET
- 用于获取资源
- 对服务器数据
- 没有Body
GET /users/1 HTTP/1.1
Host: baidu.com
对应Retrofit的代码
@GET("/users/{id}")
Call getUser(@Path(“id”) String id, @Query(“gender”) String gender);
POST
- 用于增加或修改资源
- 发送给服务器的的内容写在Body里面
- 有Body
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded Content-Length: 13
name=rengwuxian&gender=male
对应Retrofit的代码
@FormUrlEncoded
@POST("/users")
Call addUser(@Field(“name”) String name, @Field(“gender”) String gender);
PUT(一般会用POST)
- 用于修改资源
- 发送给服务器的内容写在Body里面
- 有Body
PUT /users/1 HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded Content-Length: 13
gender=female
对应Retrofit的代码
@FormUrlEncoded
@PUT("/users/{id}")
Call updateGender(@Path(“id”) String id, @Field(“gender”) String gender);
DELETE
- 用于删除资源
- 不发送Body
DELETE /users/1 HTTP/1.1
Host: api.github.com
对应Retrofit的代码
@DELETE("/users/{id}")
Call getUser(@Path(“id”) String id, @Query(“gender”) String gender);
HEAD
- 和GET使用方法完全相同
- 和GET唯一的区别在于,返回的响应中没有Body
GET 与PUT 和DELETE都是幂等的
响应报文
响应报文格式:状态行,Headers,Body
Status Code状态码
三位数字,用于对响应结果做出类型描述
- 1xx:临时性消息。如:100(继续发送),101(正在切换协议)
- 2xx:成功。如:200(OK),201(创建成功)
- 3xx:重定向。如:301(永久移动),302(暂时移动),304(未修改)
- 4xx:客户端错误。如:400(客户端请求错误),401(请求失败),403(被禁止),404(找不到内容)
- 5xx:服务器错误。如500(服务器内部错误)
Headers
作用:HTTP消息的元数据metadata
包含 Host,Content-Type/Content-Length,Location,User-Agent,Range/Accept-Range等
Host
目标主机。注意,不是在网络上寻址,而是在目标服务器上用于定位子服务器
Content-Type
指定Body的类型。主要由四类
1.text/html(返回html文本)
2.application/x-www-form-urlencoded(Web页面纯文本表单的提交方式)
3.multitype/form-data(Web页面含有二进制时的提交方式)
4.application/json,image/jpeg,application/zip…(单项内容(文本或非文本都可以),用于Web Api的响应或者POST/PUT的请求)
Content-Length
指定Body的长度(字节)
Transfer:chunked(分块传输编码)
响应发起,内容长度还没有确定的情况下,和Content-Length不同时使用,用途是尽早做粗响应,减少用户的等待
HTTP/1.1 200 OK
Content-Type: text/html Transfer-Encoding: chunked
4
Chun
9
ked Trans
12
fer Encoding
0