HTTP

Http的Url格式:

https://mp.csdn.net/console/editor/html/106963393
其中https为协议类型://mp.csdn.net为服务器地址[:端⼝号]console/editor/html/106963393为路径

Http的请求报文:

Http的响应报文:

Http的请求方法: 

Get请求:
· ⽤于获取资源
· 对服务器数据不进⾏修改
· 不发送 Body
· 幂等(既反复调用多次时会得到相同的结果)
GET /users/1 HTTP/1.1
Host: api.github.com

对应 Retrofit 的代码:
@GET("/users/{id}")
Call<User> getUser(@Path("id") String id,@Query("gender") String gender);
Post请求:
· ⽤于增加或修改资源
· 发送给服务器的内容写在 Body ⾥⾯
· 不幂等(因为每次请求都可能会增加新的数据,所以不幂等)

POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

对应 Retrofit 的代码:
@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name,@Field("gender") String gender);
PUT的请求方法:
· ⽤于修改资源
· 发送给服务器的内容写在 Body ⾥⾯
· 幂等(既反复调用多次时会得到相同的结果)

PUT /users/1 HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

对应 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: api.github.com

对应 Retrofit 的代码:
@DELETE("/users/{id}")
Call<User> getUser(@Path("id") String id,@Query("gender") String gender);
HEAD的请求方法:
· 和 GET 使⽤⽅法完全相同
· 和 GET 唯⼀区别在于,返回的响应中没有 Body
Status Code 状态码:
 
三位数字,⽤于对响应结果做出类型化描述(如「获取成功」「内容未找到」)。
· 1xx:临时性消息。如:100 (继续发送)、101(正在切换协议)
· 2xx:成功。最典型的是 200(OK)、201(创建成功)。
· 3xx:重定向。如 301(永久移动)、302(暂时移动)、304(内容未改变)。
· 4xx:客户端错误。如 400(客户端请求错误)、401(认证失败)、403(被禁
⽌)、404(找不到内容)。
· 5xx:服务器错误。如 500(服务器内部错误)。

Header:

Header:HTTP 消息的 metadata。

Host:⽬标主机。注意:不是在⽹络上⽤于寻址的,⽽是在⽬标服务器上⽤于定位⼦服务
器的。

Content-Type:指定 Body 的类型。主要有四类:
1· text/html 
Body 中返回 html ⽂本

2· x-www-form-urlencoded
以纯⽂本表单的提交⽅式

格式如下:
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

请求body里面的内容的格式:name=rengwuxian&gender=male

对应 Retrofit 的代码:
@FormUrlEncoded
@POST("/users")
Call<User> addUser(@Field("name") String name,@Field("gender") String gender);

3· multipart/form-data
含有⼆进制⽂件时的提交⽅式

格式如下:
POST /users HTTP/1.1
Host: hencoder.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
@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);

4· application/json , image/jpeg , application/zip ...
单项内容(⽂本或⾮⽂本都可以),⽤于 Web Api 的响应或者 POST / PUT 的请求

· 请求中提交 JSON:
POST /users HTTP/1.1
Host: hencoder.com
Content-Type: application/json; charset=utf-8
Content-Length: 38
请求body里面的内容的格式:{"name":"rengwuxian","gender":"male"}

对应 Retrofit 的代码:
@POST("/users")
Call<User> addUser(@Body("user") User user);

响应中返回 JSON:
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
content-length: 234
[{"login":"mojombo","id":1,"node_id":"MDQ6VXNl
cjE=","avatar_url":"https://avatars0.githubuse
rcontent.com/u/1?v=4","gravat......

· 请求中提交⼆进制内容:
POST /user/1/avatar HTTP/1.1
Host: hencoder.com
Content-Type: image/jpeg
Content-Length: 1575
JFIFHH9......

对应 Retrofit 的代码:
@POST("users/{id}/avatar")
Call<User> updateAvatar(@Path("id") String id, @BodyRequestBody avatar);
...
RequestBody avatarBody =RequestBody.create(MediaType.parse("image/jpeg"),avatarFile);
api.updateAvatar(id, avatarBody

响应中返回⼆进制内容:
HTTP/1.1 200 OK
content-type: image/jpeg
content-length: 1575
JFIFHH9......

Content-Length:指定 Body 的⻓度(字节)。

Transfer-Encoding:
⽤于当响应发起时,内容⻓度还没能确定的情况下。和 Content-Length 不同时使
⽤。⽤途是尽早给出响应,减少⽤户等待。
格式:
HTTP/1.1 200 OK
Content-Type: text/html
Transfer-Encoding: chunked
4
Chun
9
ked Trans
12
fer Encoding
0

Location:指定重定向的⽬标 URL

User-Agent:⽤户代理,即是谁实际发送请求、接受响应的,例如⼿机浏览器、某款⼿机 App。

Range / Accept-Range:按范围取数据
· Accept-Range: bytes 响应报⽂中出现,表示服务器⽀持按字节来取范围数据
· Range: bytes=<start>-<end> 请求报⽂中出现,表示要取哪段数据
· Content-Range:<start>-<end>/total 响应报⽂中出现,表示发送的是哪段数据
作⽤:断点续传、多线程下载。

其他 Headers
1· Accept: 客户端能接受的数据类型。如 text/html
2· Accept-Charset: 客户端接受的字符集。如 utf-8
3· Accept-Encoding: 客户端接受的压缩编码类型。如 gzip
4· Content-Encoding:压缩类型。如 gzip

Cache:在客户端或中间⽹络节点缓存数据,降低从服务器取数据的频率,以提⾼⽹络性能。
REST:
 
REST 的定义众说纷纭,没有统⼀答案。
REST HTTP 即正确使⽤ HTTP。包括:
使⽤资源的格式来定义 URL
规范地使⽤ method 来定义⽹络请求操作
规范地使⽤ status code 来表示响应状态
其他符合 HTTP 规范的设计准则
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值