2013-05-22 63 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應執行的操作。它所說的「安全」不再是「安全的」,反之亦然。它們只具有語義或象徵意義,但如果所有人都嚴格遵守這些標準,它們也會產生非常有趣和重要的影響。