2009-02-28 95 views
4

我正在爲我的Ruby on Rails應用程序編寫Web表單。該表格有一個文本框,一些複選框,一組單選按鈕和兩個文本框。GET或POST,用於提交表單的方法?

使用GET over POST的優缺點是什麼,反之亦然。我一直認爲你應該使用GET檢索表單和POST提交,但我剛剛瞭解到你可以做到這一點。它真的有所作爲嗎?乾杯。

<% form_tag({ :action => "create" }, :method => "get") do %> 

回答

17

GET請求總是添加到URL中,其中POST與請求的主體一起提交。正如你注意既可以用來檢索和發送數據,但也有一些區別:

  1. 由於得到的是你的大小受限制的查詢字符串的最大長度的URL發送。這從瀏覽器到瀏覽器不同,但通常至少約2000個字符(在現代瀏覽器上)。這通常不適合發送大文本字段(例如電子郵件)。

  2. AS的GET命令在查詢字符串暴露它可以由用戶

  3. 很容易地修改爲GET命令是在查詢字符串它並使其更容易爲用戶書籤特定的頁面,假設你的頁面可以處理一些狀態變量。

  4. POST通常更適合發送數據,因爲它適合請求的性質,主要是因爲上述限制。

+0

Chris,好的答案! – Niyaz 2009-02-28 10:57:31

5

的HTML規範技術上對之間限定的差作爲「GET」是指形式的數據是要被編碼的(由瀏覽器)到一個URL而「POST」是指該表格數據是出現內一個消息體。

但是,使用建議是當表單處理是「冪等」時應該使用「GET」方法,並且僅在這些情況下。作爲一種簡化,我們可以說「GET」基本上只是用於獲取(檢索)數據,而「POST」可能涉及任何內容,如存儲或更新數據,訂購產品或發送電子郵件。

1

取決於你是否有語義。如果您正在製作基於HTML的API,則GET和POST都會保持內在含義。但通常,GET用於獲取數據,POST用於提交數據。

最大的區別在於GET將所有數據放在URL中(可以限制大小),而POST將它作爲HTTP請求的數據部分發送。如果您允許使用GET請求輸入數據,那麼您也可以更輕鬆地進行大量Web漏洞攻擊,例如CSRF。有人可以爲易受攻擊的表單的操作(例如,密碼更改表單)做一個預先填充的鏈接,將其發送給不知情的用戶點擊該用戶並在不知不覺中更改其密碼。

此外,沒有瀏覽器會警告用戶是否刷新了一個GET頁面,該頁面會進行數據輸入(如果您不小心,會導致重複輸入),但在POST上,大多數瀏覽器會顯示警告。

1

我想其他答案涵蓋了主要的東西。另外我想補充一點。使用GET來獲取關鍵數據,比如通過GET請求發送密碼,會比POST更容易暴露密碼,因爲它將存儲在瀏覽器的歷史緩存,代理緩存,服務器日誌等中。