2016-09-20 86 views
1

GET方法是冪等的,POST不是。我們在表單提交中使用它,如果我們提交兩次它將重新提交表單數據。以及爲什麼我們不使用GET來下訂單或購買產品,例如當它是冪等的時候。GET方法如何冪等

回答

0

冪等HTTP方法是一種HTTP方法,可以多次調用而不會產生不同的結果。如果該方法僅被調用一次或十次以上,則無關緊要。結果應該是一樣的。同樣,這隻適用於結果,而不適用於資源本身。

a=10; //This is idempotent: no matter how many times we execute this statement, a will always be 4. 
a++; //This is not idempotent. Executing this 10 times will result in a different outcome as when running 5 times. 

現在,來到您的查詢。
如果我們使用GET方法進行訂購/採購產品,無論產品缺貨,訂單都會被放置。相比之下,如果您使用POST方法,則對於購買產品的每個新請求結果都會有所不同。

下面的例子是不是冪等,因爲每一個新的請求,結果會不同

https://accounts.google.com/Login#identifier 

GET方法應該用於從瀏覽器中的信息發送到服務器的URL 。以下是GET方法的一個示例用法。

http://www.google.co.in/search?q=cristiano+ronaldo 

下面是答案在評論中查詢:

當用戶再次訪問起因於一個表單提交的網頁,他們可能會呈現的頁面從他們的歷史堆棧(這是他們可能是有意的),或者他們可能會被告知該頁面已經過期。典型的用戶對後者的反應是重新加載。

如果請求是冪等的,表單作者通過指定GET方法向瀏覽器發送信號,這是無害的。

如果瀏覽器想要重新提交POST請求,通常會(實際上「應該」)警告他們的用戶,相信這將導致進一步的「宇宙狀態的永久改變」,例如,訂購另一輛梅賽德斯 - 奔馳的信用卡或其他任何東西。如果用戶在嘗試重新加載無害的冪等請求時習慣了這種情況,那麼當它們隨便地[確定]請求時,它遲早會咬他們。

現在,在實現GET和POST這兩種方法時,開發人員應該考慮安全問題並在特定方法中編寫代碼。考慮到GET方法的所有限制(url的大小等),任何代碼都可以用這兩種方法編寫,但這不是一個好的做法。

GET - >用於信息檢索(如果要讀取數據而不更改狀態)
POST - >用於信息創建/更新/刪除。

+0

在GET方法中,如果我們將訂單放置兩次,如刷新或返回,再次單擊提交按鈕會發生什麼。它會放置兩次還是一次? – Dhivakar

+0

先自己試試。 –

+0

我試過但我無法得到確切的解決方案。如果你不介意,你可以舉一個GET和POST的例子來反映冪等性 – Dhivakar