2013-05-22 66 views
-1

现在,在我看来,GET和POST都用于从服务器获取资源。唯一的区别是POST请求的有效载荷包含额外的数据,但GET请求没有。今天,我读了这一点:关于POST,GET,PUT,DELETE的困惑

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。

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

+6

阅读维基百科文章(认真地说,它有更好的解释):http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods – Blender

+0

你要求解释它,你已经提供了解释。有什么不清楚你读的是什么? –

+0

谢谢,但我的意思是我明白POST也会获取现有资源,如GET。防爆。当我提交一个表单(这是POST,好的),一个页面被请求,我没有看到任何资源创建? – hienbt88

回答

1

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

+0

如果海报无法理解“GET:**获取现有资源**。该URL包含服务器需要查找和返回资源的所有必要信息”,我非常高度地怀疑“HTTP动词是操作的方式抽象资源“或”以标准化方式管理“将为他们澄清任何事情。 –

+0

只是希望得到REST背后的一些想法。当我学习这些时,我发现这很有帮助。什么VS为什么。 – Puhlze

0

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

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

+0

重复的信息少于所引用问题的信息量,并且您已经将语言特定的标记混淆了,而标记不是标记或问题本身的一部分。这有帮助吗? –

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应执行的操作。它所说的“安全”不再是“安全的”,反之亦然。它们只具有语义或象征意义,但如果所有人都严格遵守这些标准,它们也会产生非常有趣和重要的影响。