2010-01-31 40 views

回答

2

危害是用戶可以輕鬆導航到該網址並執行潛在的破壞性操作。

/noform/edit #URL typed by user => Action Performed 
/noform/update #URL typed by user => Error is thrown, No Action Performed 

正常的瀏覽體驗生成GET請求到服務器。假設是,您可以輕鬆導航到的任何頁面(或輸入到您的地址欄中)都不會執行任何數據更改功能。

A POST通過表單提交或AJAX請求生成的請求需要在服務器上更改數據的結果。

類似地,PUTDELETE的兩個導軌「僞造」版本也不是您可以簡單導航到使用瀏覽器的操作。

解決方案

的解決方案是隻具有update行動,您最初會鏈接到edit使用類似以下內容:

button_to "Add new tracker", noform_path, :method => :put 

如果有任何類型的錯誤,你可能仍然需要一個編輯路徑來顯示用戶,以便他們能夠糾正某些事情。但是從你所描述的情況來看,一個單獨的動作應該可以做到。

+0

那麼最新的解決方案?我應該提供一個基本上只是一個空表格或button_to的表單嗎? 我真的不想讓用戶看到另一個屏幕,然後點擊另一個按鈕。 – Cameron 2010-01-31 01:00:04

+4

搜索引擎蜘蛛程序加劇了POST問題,它會在您網站的每個頁面上執行GET操作,系統地執行不需要的編輯和刪除操作。 – 2010-01-31 01:05:12

+0

@Cameron我更新了我的答案。如果不清楚,請告訴我。 – 2010-01-31 01:09:29

2

獲取應始終idempotent - 這是他們不應該執行任何動作,這將改變應用程序,數據庫的狀態等

正如旁白 - 在真正的RESTful形式的編輯會由HTTP Update操作執行,但Rails使用表單中的帖子和隱藏值來模擬此操作,因爲瀏覽器沒有HTTP更新。

它仍然不清楚爲什麼你需要一個沒有輸入字段的更新。也許更多的細節會有所幫助。

+2

+1當我與某人談論它時,我永遠不會記住冪等性這個詞。 – 2010-01-31 01:18:06

+1

@ eed3si9n - 可能是弗洛伊德語塊,它聽起來像是你使用偉哥的東西。 – 2010-01-31 01:34:48

相關問題