2011-03-03 101 views
31

我剛剛爲我的最新應用程序之一構建了一個RESTful API。我還構建了一個簡單的管理界面腳手架類,它將枚舉資源並構建簡單的表單和表格以編輯,創建,刪除等。爲什麼現代瀏覽器不支持PUT和DELETE表單方法?

爲了更新和刪除資源,該類使用PUT和DELETE方法輸出表單,漂亮簡單:

<form action="/posts/xxxxxxx" method="DELETE"> 
<input type="submit" value="Delete" /> 
</form> 

<form action="/posts/xxxxxxx" method="PUT"> 
<input type="text" name="username" value="nikcub" /> 
<input type="text" name="fullname" value="Nik Cubrilovic" /> 
<input type="text" name="email" value="[email protected]" /> 
<input type="submit" value="Update" /> 
</form> 

很簡單。如果檢測到Javascript,那麼它會攔截表單並使用XMLHTTPRequest來提交回來。 Javascript支持其他HTTP方法,但爲什麼現代瀏覽器不支持PUT和DELETE方法?它最終發送一個GET。

我更喜歡當應用程序正常回退到使用相同方法的標準HTML時,而不必使用隱藏字段和類中的邏輯,或者更糟糕的是,將方法放在URI中並且允許GET工作。

我想不出任何瀏覽器爲什麼不支持其他HTTP方法,因爲開發人員只是通過黑客GET或使用POST來解決它。

我搜索了一個答案,並能夠找到它指定爲the XHTML 2.0 spec的一部分。沒有提及它in the HTML5 spec

「HTML5兼容」瀏覽器不支持它的任何原因嗎?我可以在哪裏發佈請求來打開此備份並在瀏覽器中實現?

+0

確定有關@JoostBaaij我沒有嘗試自己,但MDN隻字不提它https://developer.mozilla.org/en-US/docs/Web/HTML/Element /表格 – 2013-10-22 16:00:14

+0

@JoostBaaij只需雙重檢查。提交此表格http://jsbin.com/IWoWiRi/1/然後在這裏檢查請求http://requestb.in/ol62w4ol?inspect Chrome30,FF24,IE10'method =「PUT」'all顯示爲'GET '所以我很抱歉,但你錯了。 – 2013-10-22 16:08:35

+0

如果沒有,您仍然可以在端口80上打開telnet連接,並使用客戶端腳本啓動命令。 – user2284570 2013-10-22 20:04:30

回答

8

HTML 4.01僅支持發佈和獲取,請參閱http://www.w3.org/TR/html4/interact/forms.html#h-17.3不確定其他HTML規範。

+1

我知道,我想知道爲什麼今天REST的普及,它並沒有在「HTML5瀏覽器」中實現 – nikcub 2011-03-04 06:33:24

+0

XHTML 2(XForms 1.1更精確)規範包括PUT和DELETE方法。請參閱http://www.w3.org/TR/xforms11/#submit-put – Harri 2011-03-04 07:28:21

+0

處於當前狀態的HTML5不包含這些方法,http://dev.w3.org/html5/spec/Overview.html#attr -fs-method – Harri 2011-03-04 07:29:16

19

一些web框架(如Ruby on Rails的)周圍獲得通過在形式與「實際」的方法的值的隱藏_method參數,例如:

<form action="/posts/xxxxx" method="POST"> 
    <input type="hidden" name="_method" value="DELETE"> 
    <input type="submit" value="delete"> 
</form> 

框架然後重寫請求在處理之前在服務器端使用_method參數的值作爲HTTP方法。

不知道這是否對你有幫助。

+0

謝謝.. http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-put-or-delete-methods-work – 2013-04-30 04:38:16

+1

Laravel(php)也是如此。 – Praveen 2015-11-23 05:58:40

5

其實我做了很少量的研究&在其他Stackexchange論壇上找到了這個答案。

我知道這不是一個很好的答案發布鏈接,但我不知道確切的答案。所以,這是你解決疑問的唯一方法。

https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

+0

技術上這已經在評論中注意到了,但是。我認爲這可以作爲答案。 – 2013-10-29 14:52:41

+0

謝謝@GeorgeMauer – 2013-10-29 15:04:33

相關問題