Hypertext Transfer Protocol(超文本传输协议)
HTTP 是一种规定客户端应用程序如何与服务器通信以及传输超文本文档的协议。
1、什么是超文本?
超文本,即「扩展型文本」,指的是 HTML 中可以有链向别的文本的链接(hyperlink)。
HTTP 和 HTML(Hypertext Markup Language 超文本标记语言)一起诞生,用于在网络上请求和传输 HTML 内容
2、HTTP 的工作方式
浏览器:用户输入地址后回车或点击链接 -> 浏览器拼装 HTTP 报文并发送请求给服务器 -> 服务器处理后发送响应报文给浏览器 -> 浏览器解析响应报文并使用渲染引擎显示到界面
手机APP:用户点击或界面自动触发联网需求 -> Android 代码调用拼装 HTTP 报文并发送请求到服务器 -> 服务器处理请求后发送响应报文给手机 -> Android 代码处理响应报文并作出相应处理(如存储数据、加工数据、显示数据到界面)
3、HTTP 请求地址(URL)
URL格式
三部分:协议类型、服务器地址(和端口号)、路径(Path)
协议类型://服务器地址[:端口号]路径
HTTP
4、HTTP 报文格式
请求报文
请求行 POST /http HTTP/1.1
Headers Host: insss.cn
Content-Type: application/json
Content-Length: 8038
Body bodybodybodybodybodybodybody...
其中请求行从左到右依次为「请求方法」、「路径」、「HTTP版本号」
响应报文
状态行 HTTP/1.1 200 OK
Headers content-type: application/json
cache-control: public, max-age=60, s-maxage=60
vary: Accept,Accept-Encoding
content-encoding: gzip
Body {"id":0,"user_name":"admin","age":18,"sex":0}
其中状态行从左到右依次为「HTTP版本号」、「状态码」、「状态信息」
5、HTTP 请求方法(Request Method)
GET
- 用于获取资源
- 对服务器数据不进行修改
- 不发送 Body
GET /users/1 HTTP/1.1
Host: insss.cn
对应 Retrofit 的代码:
@GET("/users/{id}")
Call<User> getUser(@Path("id") String id, @Query("gender"));
POST
- 用于增加或修改资源
- 发送给服务器的内容写在 Body 里面
POST /users HTTP/1.1
Host: insss.cn
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
name=insss&gender=male
对应 Retrofit 的代码:
@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name, @Field("gender") String gender);
PUT
- 用于修改资源
- 发送给服务器的内容写在 Body 里面
PUT /users/1 HTTP/1.1
Host: insss.cn
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
gender=female
对应 Retrofit 的代码:
@FormUrlEncoded
@PUT("/users/{id}")
Call<User> updateGender(@Path("id") String id, @Field("gender") String gender);
DELETE
- 用于删除资源
- 不发送 Body
DELETE /users/1 HTTP/1.1
Host: insss.cn
对应 Retrofit 的代码:
@FormUrlEncoded
@DELETE("/users/{id}")
Call<User> deleteUser(@Path("id") String id);
HEAD
- 和 GET 使用方法完全相同
- 和 GET 唯一区别在于,返回的响应中没有 Body
6、HTTP 状态码(Status Code)
三位数字,用于对响应结果做出类型化描述(如「获取成功」「内容未找到」)。
- 1xx:临时性消息,如:100(继续发送)、101(正在切换协议)
- 2xx:成功,最典型的是 200(OK)、201(创建成功)
- 3xx:重定向,如 301(永久移动)、302(暂时移动)
- 4xx:客户端错误,如 400(客户端请求错误)、401(认证失败)、403(被禁止)、404(找不到内容)
- 5xx:服务器错误,如 500(服务器内部错误)
7、HTTP 请求头(Header)
作用:HTTP 消息的 metadata