GET
GET 请求指定资源的表示。请求使用GET只应检索数据。
POST
POST 将数据发送到服务器。请求主体的类型由 Content-Type 标头指示。
PUT
PUT 请求方法创建新的资源或替换请求负载目标资源的表示。
POST 与 PUT 区别
PUT 是幂等的:调用它一次或多次连续具有相同的效果(也就是没有侧面的效果)。PUT 是将客户端的资源放在请求 URI 上。对于服务器到底是创建还是更新,由服务器返回的 HTTP Code 来区别。如果用 PUT 来达到更改资源,需要客户端提交资源全部信息,如果只有部分信息,不应该使用 PUT(因为服务器使用客户端提交的对象整体替换服务器的资源)
DELETE
DELETE 请求方法删除指定的资源。
OPTIONS
OPTIONS 用于描述目标资源的通讯选择。客户端可以为 OPTIONS 方法指定一个特定的 URL,或者指定一个星号(*)来引用整个服务器。可以使用 OPTIONS 方法对服务器发起请求,以检测服务器支持哪些 HTTP 方法。
在 CORS 中,可以使用 OPTIONS 方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。预检请求报文中的 Access-Control-Request-Method
首部字段告知服务器实际请求所使用的 HTTP 方法;Access-Control-Request-Headers
首部字段告知服务器实际请求所携带的自定义首部字段。服务器基于从预检请求获得的信息来判断,是否接受接下来的实际请求。服务器所返回的 Access-Control-Allow-Methods
首部字段将所有允许的请求方法告知客户端。
什么是 OPTIONS
是浏览器对复杂跨域请求的一种处理方式,在真正发送请求之前,会先进行一次预检请求,就是我们刚刚说到的参数为 OPTIONS 的第一次请求,作用是用于试探服务端是否能接受真正的请求。
方法 | 成功是否有身体 | 是否安全 | 是否幂等 | 是否可缓存 | 在表单中是否允许 |
---|---|---|---|---|---|
GET | 否 | 是 | 是 | 是 | 否 |
POST | 是 | 否 | 否 | 新鲜度 | 是 |
PUT | 否 | 否 | 是 | 否 | 否 |
DELETE | 否 | 否 | 是 | 否 | 否 |
幂等与安全
安全: 就是不会出现 脏读,幻读,不可重复读。这里的安全和通常所理解的安全意义不同,就好比如果一个请求的语义本质上就是获取数据(只读),那么这个请求就是安全的。客户端向服务器发起的请求如果没有引起服务器端任何的状态变化,那么他就是安全的而 post 请求来提交数据必然会是服务器发生相应的变化。从这个维度来看,get请求相对服务器而言,是安全的,post则不安全的。
- 脏读(Dirty Read): 脏读是指在一个事务中读取到了另一个事务未提交的数据。如果另一个事务回滚了,那么读取到的数据就是无效的。脏读只发生在读未提交(Read Uncommitted)的隔离级别。
- 不可重复读(Non-repeatable Read): 不可重复读是指在一个事务内,多次读取同一数据集合,由于另一个事务的修改,导致在同一个事务中读取到的数据不一致。例如,一个事务读取了一行数据,然后另一个事务更新了这行数据,第一个事务再次读取这行数据时,发现数据已经改变。不可重复读发生在读已提交(Read Committed)和读未提交(Read Uncommitted)隔离级别。
- 幻读(Phantom Read): 幻读是指在一个事务中,多次查询返回的结果集不一致,因为另一个事务插入了新行。例如,一个事务首先根据某个条件查询得到一组结果,然后另一个事务插入了满足该条件的新行,第一个事务再次查询时,发现结果集中多了一行。幻读发生在读已提交(Read Committed)和可重复读(Repeatable Read)隔离级别。
幂等: 就是在操作成功的前提条件下,不会对数据库造成额外的影响。通俗的来讲就是指同一个请求执行多次和仅执行一次的效果完全相等就是幂等的。幂等主要是为了处理同一个请求重复发送的情况,重复请求会不会发生无法预知的后果,假如在请求响应之前失去连接,如果这个请求是幂等的,那么就可以放心的重发一次请求。所以可以得出 get 请求是幂等的,可以重复发送请求,post 请求是不幂等的,重复请求可能会发生无法预知的后果。****