2009-07-09 37 views
37

環顧四周,我不能說出使用除了GET和POST請求的任何一個Web應用程序(而不是web服務)。這是否有特定的原因?一些瀏覽器(或服務器)不支持任何其他類型的請求嗎?或者這僅僅是出於歷史原因?我想利用PUT和DELETE請求在服務器端讓我的生活變得更輕鬆,但我不願意,因爲沒有其他人。是否有任何理由不在Web應用程序中使用HTTP PUT和DELETE?

回答

39

其實人相當數量的使用PUT和DELETE,主要用於非瀏覽器的API。一些例子是Atom發佈協議和谷歌數據API:

除此之外,你沒有看到PUT/DELETE共同使用,因爲大多數瀏覽器不通過表單支持PUT和DELETE。 HTML5似乎是固定的:

它適用於瀏覽器應用程序的方法是:人設計RESTful應用與PUT和記DELETE,然後「隧道」那些通過從職位要求瀏覽器。例如,見到這對SO問題Ruby on Rails的是如何實現這一使用隱藏字段:

所以,你不會是在自己與更大的一組HTTP的設計應用程序動詞在腦海中。

編輯:順便說一句,如果你很好奇,爲什麼PUT/DELETE從基於瀏覽器形式的帖子不見了,原來有沒有真正的良好的技術原因。圍繞這個線程REST的討論郵件列表,特別是Roy Fielding的意見,在閱讀一些背景有趣的是:

編輯:有是否AJAX庫的一些意見表示支持所有的方法。它確實涉及到XMLHttpRequest的實際瀏覽器實現。我認爲有人可能會發現這個鏈接方便,它會測試您的瀏覽器,以查看HttpRequest對象與各種HTTP選項的兼容性。

不幸的是,我不知道是哪個收集這些結果的引用。

+6

猜猜是什麼?在最新版本(2010年10月19日)中,HTML5中的PUT/DELETE支持似乎被刪除。 http://www.w3.org/TR/html5/forms.html#form-submission-0 – 2010-12-06 01:50:05

+0

@Xie:有趣的發現。似乎適得其反... – 2011-11-14 08:34:46

3

強硬的安全政策有些代理服務器可能會刪除它們。無論如何,我使用PUT和DELETE。

3

我讀過,有些瀏覽器不支持其他的HTTP方法得當,雖然我不能說出任何細節。

軌,特別是會收拾你的形式與方法的參數明確設置這個即使瀏覽器不支持這些方法。這似乎是一個合理的預防措施,如果你打算這樣做。

9

很簡單,HTML 4.01 form element只允許在其method屬性

+0

嗯,這是有道理的......但是這不適用於Ajax請求,對不對?我可以使用任何我想要的方法? – 2009-07-09 05:15:05

+0

如果瀏覽器是按照HTML 4.01規範構建的,它將不會理解除規範以外的任何內容。這就是你可以假設瀏覽器可以做的所有事情 – Gareth 2009-07-09 05:45:02

0

這取決於你的瀏覽器和Ajax庫中的值「POST」和「GET」。例如,即使瀏覽器不支持,jQuery也支持所有HTTP方法。請參閱「type」屬性上的jQuery "ajax" documentation

Restlet Java框架可以讓您隧道PUT和DELETE通過HTML POST操作的請求。要做到這一點,你只需要添加方法=放或方法=刪除您的URI查詢字符串,如:

http://www.example.com/user=xyz?method=delete ... 

這是一樣的Ruby on Rails的方法(如@ars如上所述)。

1

我說使用HTTP的所有功能,瀏覽器被詛咒,哈哈。也許它會激勵更完整和正確地使用HTTP協議。網絡上發生的事情不僅僅是POST和GET。關於時間瀏覽器實現反映了這一點

0

就個人而言,我實在看不到任何目的使用PUT或在Web應用程序中刪除。應用程序執行的所有操作都是讀取或寫入,也就是輸入輸出。爲什麼需要區分HTTP請求頭部中操作的性質? 我可以使用form/object/object_id 的相同url進行ajax調用,並執行多個操作,如刪除,更新,獲取值或創建。 只看URL,我不知道它是哪一個。 通過使用GET和POST而已,我的網址是:

/對象/ ID /刪除

/對象/ ID /創建

/對象/ ID /更新

/對象/ ID - >隱含GET

根據我有限的經驗,這在許多情況下比藏頭請求類型的清潔了許多。 我不是說永遠不應該使用PUT或DELETE,只是說,只有在絕對需要時才使用它們。

請參閱「基於REST的Web API」倫納德·理查森閱讀更多關於不同的使用情況和公約關於在REST風格的Web API的HTTP請求方法。

相關問題