基本的 HTTP 方法GET、POST、PUT 和 DELETE

简介: HTTP 中有四种基本方法:GET、POST、PUT 和 DELETE。大部分时间我们都使用 GET。它用于任何安全的事情,不会引起任何副作用。GET 能够被添加书签、缓存、链接到代理服务器并通过代理服务器传递。这是一个非常强大的操作,一个非常有用的操作。

一、方法介绍

1.1 GET

GET 方法用于从服务器检索资源。这是一种安全的方法,因为它不会以任何方式改变资源的状态。GET 方法是幂等的,因此多次调用此方法将始终给出相同的结果。

HTTP GET 'http://www.timi.com/users'
HTTP GET 'http://www.timi.com/users?size=20&page=5'
HTTP GET 'http://www.timi.com/users/123'
HTTP GET 'http://www.timi.com/users/123/address'

1.2 POST

POST 方法用于在服务器上的资源集合中创建新资源。

需要注意的是,POST 是非幂等的。因此,调用两个相同的 POST 请求将导致在服务器上创建重复的信息。
HTTP POST'http://www.timi.com/users/123'
HTTP POST'http://www.timi.com/users/123/address'

1.3 PUT

PUT 用于更新服务器上的现有资源,并且更新完整资源。如果资源不存在,PUT 可能会决定创建新资源。PUT 方法是幂等的,因此多次调用此方法总是会多次更新同一资源。

HTTP POST 'http://www.apidomain.com/users/123'
HTTP POST 'http://www.apidomain.com/users/123/accounts/456'

1.4 PATCH

PATCH用于更新服务器上现有的资源,它更新资源的一部分。如果资源不存在,PUT 可能会决定创建新资源。正如 PUT 方法一样,PATCH 也是幂等的。

HTTP PATCH 'http://www.apidomain.com/users/123'
HTTP PATCH 'http://www.apidomain.com/users/123/accounts/456'
PUT 方法主要完全替换整个现有资源,但 PATCH 部分更新现有资源。PATCH 方法不能替代 PUT 方法。它应用增量 (diff),而不是替换整个资源。

1.5 DELETE

DELETE方法用于从服务器中删除资源。它删除由 Request-URI 标识的资源。DELETE 方法是幂等的。

二、优势

PUT、PATCH 和 DELETE能请求的POST也可以进行请求,那么为什么不用POST来代替前面的三个方式呢,这三个方式的优势在哪?

2.1 幂等性

首先:HTTP 中有四种基本方法:GET、POST、PUT 和 DELETE。大部分时间我们都使用 GET。它用于任何安全的事情,不会引起任何副作用。GET 能够被添加书签、缓存、链接到代理服务器并通过代理服务器传递。这是一个非常强大的操作,一个非常有用的操作。

但相比与POST的话GET就不是那么强大,POST 可能是最强大的操作,GET能干的它都可以去做,基本上很多人都在一个POST打天下。然而,POST对可能发生的事情没有做任何限制。也就是说在没有缓存、没有按钮、没有询问用户的情况下等情况下,你无法对它做任何操作。但是,浏览器可能会查看页面上的所有链接并预获取它们,或者预获取认为接下来最有可能被关注的链接。

PUT 和 DELETE 位于 GET 和 POST 之间。PUT 或 DELETE 与 POST 之间的区别在于 PUT 和 DELETE 是幂等的,而 POST 不是

PUT 和 DELETE
假设你想在以下位置创建一个新页面 http://www.timi.com/test.html,因此你输入内容并将这个页面放在该URL 中。接着服务器在你提供的 URL处创建该页面。但是,由于某种原因你的网络连接中断了,这时不确定请求是否通过,可能是网络慢,可能代理服务器有问题。PUT 方法完全可以再试一次,或者再试一次——想试多少次就试多少次。因为将同一个文档放入同一个URL 十次与放入一次没有任何不同。DELETE也一样。你可以删除十次,这与删除一次是一样的。

POST
POST 每次可能会导致不同的情况发生。J假设你正在通过按购买按钮从在线商店结账。如果你再次发送该 POST 请求,最终可能会再次购买购物车中的所有商品。如果再次发送,那么恭喜你,你买了3个这玩意。

2.2 URL

2.2.1 效率

大部分人都在用POST做更新、删除操作,这中操作是没啥问题的,但效率不如使用PUT、DELETE。PUT 和 POST 之间还有一个非常重要的区别。假设要创建一个新页面,然后希望它位于某个 URL,比如:http: //www.timi.com/test.html. 在完全支持 PUT的情况下这些操作都可以通过用户名和密码进行保护。

相比之下,如果输入 POST http: //www.timi.com/test.html.,则没有任何内容可以接收到 POST请求。一般来说,当客户端想要选择 URL 时,可以使用 PUT 来创建新文档。当发布到某个现有 URL 时,可以使用 POST 创建新文档。

目录
相关文章
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
927 2
|
API 开发者
了解 HTTP 的PUT 与 POST方法的综合指南
HTTP PUT 和 POST 方法是构建 Web 应用与 API 的核心工具,用于资源的创建与更新。PUT 方法通过指定 URL 更新或创建完整资源,具有幂等性;而 POST 方法更灵活,主要用于创建新资源,但不具备幂等性。本文详细对比了两者在请求体、URL 使用、资源处理等方面的区别,并提供了实际应用示例,帮助开发者根据场景选择合适的方法以优化 API 设计。
1171 13
|
缓存 安全 API
http 的 get 和 post 区别 1000字
【10月更文挑战第27天】GET和POST方法各有特点,在实际应用中需要根据具体的业务需求和场景选择合适的请求方法,以确保数据的安全传输和正确处理。
|
Web App开发 数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
可伸缩系统的架构经验 Feb 27th, 2013 | Comments 最近,阅读了Will Larson的文章Introduction to Architecting System for Scale,感觉很有价值。
2578 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
一个典型的星型模式包括一个大型的事实表和一组逻辑上围绕这个事实表的维度表。  事实表是星型模型的核心,事实表由主键和度量数据两部分组成。
705 0
|
新零售 Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
各大互联网公司架构演进之路汇总 大型网站架构演化历程 大型网站架构技术一览 Web 支付宝和蚂蚁花呗的技术架构及实践 支付宝的高可用与容灾架构演进 聚划算架构演进和系统优化 (视频+PPT) 淘宝交易系统演进之路 (专访) 淘宝数据魔方技术架构解析 淘宝技术发展历程和架构经验分享(视频+PPT)(2.
2284 0
|
机器学习/深度学习 Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
1.样本要随机化,防止大数据淹没小数据 2.样本要做归一化。关于归一化的好处请参考:为何需要归一化处理3.激活函数要视样本输入选择(多层神经网络一般使用relu)4.
839 0
|
Web App开发 前端开发
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Jboss7中ejb3使用@Schedule调度器总是每分钟执行 1 问题:当我尝试着去开发一个ejb3的@Schedule调度器来执行我预定每5秒钟执行一次的任务时。
937 0

热门文章

最新文章