-1

在此之前,在我看来,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。

谁能为我解释一下?谢谢。

4

3 回答 3

1

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

于 2013-05-22T03:47:36.213 回答
0

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

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

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

正如原始海报所提到的,规范试图通过说 GET 是为了这样的东西,POST 是为了另一个,等等等等,来把它们放在眼里。一切都对,你只需点头说“啊,好吧”。而已。但是,当您尝试使用这些动词做某事时,您找不到浏览器和服务器所需的支持。所以,使用 POST 和 GET 是相当安全的,你几乎可以用它们做任何事情。(其实 HEAD 动词可以用来表示一些美好而有用的东西)

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

于 2013-06-17T16:55:29.200 回答
0

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

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

于 2013-05-22T03:47:24.447 回答