HTTP的概念,原理,工作机制,数据格式

HTTP到底是什么

用于传输超文本的协议,以前是HTML,现在也包括Web API的数据

HTTP

HTTP超文本传输协议,和HTML(超文本标记语言)一起诞生,用于在网络上请求和传输HTML内容

HTTP工作模型

客户端按需求组装HTTP报文–发送给服务器—服务器处理后得到响应报文–发送给客户端–客户端处理响应报文

URL格式

三部分:协议类型,服务器地址(端口号),路径(path)
http://baidu.com/users?name=li

报文格式

请求报文

HTTP的概念,原理,工作机制,数据格式

响应报文

HTTP的概念,原理,工作机制,数据格式

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

HTTP的概念,原理,工作机制,数据格式

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