HTTP 学习笔记一
参考链接:
GET、POST、PUT、DELETE区别
GET
- 用于获取资源
- 对服务器数据不进行修改,只是获取
- 不发送body
- 具有幂等性(这里强调的是一次和N次具有相同的副作用,而不是每次GET的结果相同。)
GET /user/1?gender=sex HTTP/1.1
Host: api.github.com
对应Retorfit的代码
@GET("/user/{id}")
Call<User> getUser(@Path("id") String id,@Query("gender") String gender)
POST
- 用于增加或修改资源
- 发送给服务器的内容写在body里面
- 非幂等的(多次调用会产生不同的结果,比如:创建一个用户,由于网络原因或是其他原因多创建了几次,那么将会有多个用户被创建.)
- 一般用于创建资源
PUT
- 理论上仅用于修改资源(实际功能和POST没有区别)
- 发送给服务器的内容写在body里面
- 幂等性(PUT id/456则会创建一个id为456的用户,多次调用还是会创建的结果是一样的,所以PUT是等幂的.)
- 一般用于更新资源
DELETE
-
用于删除资源
-
不发送body
-
幂等性(调用一次和N次对系统产生的副作用是相同的,即删掉id为4231的帖子;因此,调用者可以多次调用或刷新页面而不必担心引起错误。)
PATCH
- 用于更新局部数据(PUT则是整个更新)
- 不发送body
HEAD
- 与GET基本相同,返回的请求无body
- 返回有HEAD
POST 和 PUT的区别
从技术角度上 POST和PUT是没有任何区别的。只有语义上的区别
HEAD 和GET区别
HEAD 响应无body,GET响应有body。 H
Http Header 部分解析
Http 传输过程本质只是按照格式传输的文本. (body部分可能是二进制数据)。
Host
GET /users/1 HTTP/1.1
Host: api.github.com
Host作用不是用于定位主机的,主机IP地址是在发送数据之前就被定位了
Host 是域名,用于给主机看的,让主机决定要分配的服务器。
Content-type(传输类型)
主要有四类:
-
text/html 一般网页等
-
x-www-form-urlencoded 普通表单格式,只能传 字符串数据
Web ⻚⾯纯⽂本表单的提交⽅式。
- multipart/form-data Web ⻚⾯含有⼆进制⽂件时的提交⽅式。
4. application/json , image/jpeg , application/zip ...
单项内容(⽂本或⾮⽂本都可以),⽤于 Web Api 的响应或者 POST / PUT 的请求
提交json示例
Content-Length
指定Body的长度(字节)
chunked(Chunked Transfer Encoding 分块传输编码)
⽤于当响应发起时,内容⻓度还没能确定的情况下。和 Content-Length 不同时使 ⽤。⽤途是尽早给出响应,减少⽤户等待。
Location
指定重定向的目标URL
User-Agent
⽤户代理,即是谁实际发送请求、接受响应的,例如⼿机浏览器、某款⼿机 App。
Range / Accept-Range -按范围取数据
Accept-Range: bytes 响应报⽂中出现,表示服务器⽀持按字节来取范围数据 Range: bytes=- 请求报⽂中出现,表示要取哪段数据 Content-Range:-/total 响应报⽂中出现,表示发送的是哪段数据
作用:断线续传、多线程下载。
其他 Headers
- Accept: 客户端能接受的数据类型。如 text/html
- Accept-Charset: 客户端接受的字符集。如 utf-8
- Accept-Encoding: 客户端接受的压缩编码类型。如 gzip
- Content-Encoding:压缩类型。如 gzip
Cache 和Buffer
Cache
作⽤:在客户端或中间⽹络节点缓存数据,降低从服务器取数据的频率,以提⾼⽹ 络性能。 缓冲数据等
Buffer
作用:缓冲数据。比如服务端数据只传了部分,先缓冲起来,等所有数据传来后再进行处理
REST的定义和作用
参考链接:
REST 的定义众说纷纭,没有统⼀答案。 一般而言 REST HTTP 即正确使⽤ HTTP。
包括:
-
无状态
-
使⽤资源的格式来定义 URL
-
规范地使⽤ method 来定义⽹络请求操作
-
规范地使⽤ status code 来表示响应状态
-
其他符合 HTTP 规范的设计准则