对POST,GET,PUT,DELETE感到困惑

时间:2013-05-22 03:38:12

标签: http

在此之前,在我看来,GET和POST都用于从服务器获取资源。唯一的区别是POST请求具有包含额外数据的有效负载,但GET请求没有。今天我读到了这个:

GET: **fetch an existing resource**. The URL contains all the necessary information the server needs to locate and return the resource.
POST: **create a new resource**. POST requests usually carry a payload that specifies the data for the new resource.
PUT: **update an existing resource**. The payload may contain the updated data for the resource.
DELETE: **delete an existing resource**.

我无法理解为什么POST可以创建新资源。我从未见过PUT和DELETE。

任何人都可以为我解释一下吗?感谢。

3 个答案:

答案 0 :(得分:1)

这些都是HTTP规范中定义的HTTP“动词”。还有其他人。将HTTP动词视为对抽象“资源”进行操作的方法很有帮助。虽然服务器可以按照他们选择的任何方式解释请求,但使用标准动词有助于以标准化方式管理资源。在过去,get和post经常用于以多种方式与资源交互。例如,这有时会导致获取请求删除资源的不愉快结果。通过使用HTTP动词与资源进行交互,可以减少意外。您可以阅读有关REST的更多信息:https://en.wikipedia.org/wiki/Representational_state_transfer

答案 1 :(得分:0)

$ _ POST ['x']就像$ _SESSION ['x'],其值隐藏但存在。要将其传递到下一页,需要创建一个资源以传递到下一页。主要的区别是POST只能使用一次。 php的自动刷新代码清除了POST的值。

PUT和DELETE是不言自明的。 PUT是替换变量值的另一种方法,而DELETE用于清除。

答案 2 :(得分:0)

所有人都给出了很好的解释和描述。 GET,POST,DELETE,PUT,OPTIONS等都称为“HTTP动词”。您知道HTTP是一种旨在创建我们今天称之为Web的协议。 Web工作在客户端 - 服务器模型上,也就是说,有两个组件可以实现:客户端部分(Web浏览器)和服务器部分(Web服务器)。客户端请求网页(服务器上的资源),服务器将其发送到客户端(如果找到),然后忘记它。所有这些交互都通过所述HTTP协议发生。

当客户端从服务器请求某些内容时,它通过向服务器发送HTTP请求来完成。在该请求中,您可以找到其中一个HTTP谓词。这很简单。 POST和GET方法是众所周知的,并且所有Web浏览器都支持它们。大多数人认为这两种方法或多或少相同,实际上它对于更广泛的水平是正确的。您可以使用两者中的任何一个来完成简单的任务。他们倾向于认为GET发送附加到url的请求信息(例如,www.abc.com?sth = some)。使用POST发送相同数据时,数据不会如上所述附加,而是插入请求的正文部分。但是,使用任何一种方法都可以实现预期的操作。

问题出现在其他动词,PUT,DELETE,HEAD等等。实际上,你并不一定需要它们,就像你到目前为止所不需要的那样。它们已经并且都在HTTP协议规范中,但没有被广泛使用,这就是为什么你对它们不太了解的原因。至少我读过几十本关于网页开发和网络的书籍除了POST和GET之外没有太多关于它们的细节。

正如原始海报所提到的那样,规范试图通过说GET就是这样的事情来看待它们,POST是另一个,等等等等等等。一切都正确,你只是点头说“啊好”。而已。但是,当您尝试对这些动词执行某些操作时,您无法从浏览器和服务器中找到所需的支持。因此,POST和GET非常安全,你可以用它们做几乎所有事情。 (实际上HEAD动词可以用于一些很好的和有用的东西)

当然,正如规范所说,“GET”用于从服务器获取资源,POST用于向服务器发送一些数据,以便服务器可以相应地处理这些数据。然而,你可以让GET做POST应该做的事情,并让POST做GET应该做的事情。它不再是“安全的”它所说的“安全”,反之亦然。它们只具有语义或象征意义,但如果严格遵守标准,它们也会产生非常有趣和重要的影响。