環顧四周,我不能說出使用除了GET和POST請求的任何一個Web應用程序(而不是web服務)。這是否有特定的原因?一些瀏覽器(或服務器)不支持任何其他類型的請求嗎?或者這僅僅是出於歷史原因?我想利用PUT和DELETE請求在服務器端讓我的生活變得更輕鬆,但我不願意,因爲沒有其他人。是否有任何理由不在Web應用程序中使用HTTP PUT和DELETE?
回答
其實人相當數量的使用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選項的兼容性。
不幸的是,我不知道是哪個收集這些結果的引用。
強硬的安全政策有些代理服務器可能會刪除它們。無論如何,我使用PUT和DELETE。
我讀過,有些瀏覽器不支持其他的HTTP方法得當,雖然我不能說出任何細節。
軌,特別是會收拾你的形式與方法的參數明確設置這個即使瀏覽器不支持這些方法。這似乎是一個合理的預防措施,如果你打算這樣做。
很簡單,HTML 4.01 form
element只允許在其method
屬性
嗯,這是有道理的......但是這不適用於Ajax請求,對不對?我可以使用任何我想要的方法? – 2009-07-09 05:15:05
如果瀏覽器是按照HTML 4.01規範構建的,它將不會理解除規範以外的任何內容。這就是你可以假設瀏覽器可以做的所有事情 – Gareth 2009-07-09 05:45:02
這取決於你的瀏覽器和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如上所述)。
我說使用HTTP的所有功能,瀏覽器被詛咒,哈哈。也許它會激勵更完整和正確地使用HTTP協議。網絡上發生的事情不僅僅是POST和GET。關於時間瀏覽器實現反映了這一點
就個人而言,我實在看不到任何目的使用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請求方法。
- 1. GET,PUT,DELETE的HTTP應用程序
- 2. PUT和DELETE HTTP方法是否有任何性能優勢?
- 3. 如何使用Apache2和PHP啓用和使用HTTP PUT和DELETE?
- 4. http使用JSR 286的PUT和DELETE serveResource()
- 5. 是否有任何理由來開發應用程序的根?
- 6. 是否有任何理由使用System.Uri?
- 7. 是否有任何理由使用[:over @:?
- 8. 是否有任何理由使用isset()?
- 9. 是否有任何理由使用HTTP 410 GONE狀態碼?
- 10. 如何使用PUT或DELETE HTTP請求(在Play應用程序中)處理可選內容?
- 11. 在Electron應用程序中使用Web服務器(Express)的任何理由?
- 12. 是否有任何理由在C#中使用私有屬性?
- 13. 是否有任何理由修改iOS應用程序中的main.m文件?
- 14. 是否有任何理由使用SGML而不是XML?
- 15. C++:是否有任何理由使用uint64_t,而不是size_t
- 16. 是否有任何理由在微軟ISV中使用TFS 2010?
- 17. 是否有任何symfony2 tutorail爲複雜的web應用程序
- 18. 是否有任何理由我不應該緩存在nHibernate中?
- 19. 是否有任何理由在Swift中使用選擇器?
- 20. 是否有任何理由在VBA中使用ENUM?
- 21. 是否有可能在非web應用程序中使用togglz
- 22. mod_rewrite:如何重定向HTTP DELETE和PUT
- 23. 是否有任何理由不使用Boost :: shared_ptrs?
- 24. 是否有任何理由在C++ 1z中使用std :: map :: emplace()而不是try_emplace()?
- 25. 是否有任何理由使用等待和異步馬上?
- 26. 是否有任何通用CRUD客戶端應用程序?
- 27. 是否有任何理由不使用INLINABLE pragma作爲函數?
- 28. PUT和DELETE與Laravel的數據庫應用程序
- 29. 無法從角度js執行PUT和DELETE應用程序
- 30. 在不同的Web方法類型(GET,PUT,POST,DELETE,HEAD)的.NET框架中是否有任何常量?
猜猜是什麼?在最新版本(2010年10月19日)中,HTML5中的PUT/DELETE支持似乎被刪除。 http://www.w3.org/TR/html5/forms.html#form-submission-0 – 2010-12-06 01:50:05
@Xie:有趣的發現。似乎適得其反... – 2011-11-14 08:34:46