2012-03-31 71 views
3

爲什麼HTML <form>標籤只提供GET和POST兩種方法? HTTP規範還有其他動詞,如PUT,DELETE等。爲什麼HTML表格標籤只提供2種方法

+0

也許你應該問那個寫html規範的人 – 2012-03-31 20:45:27

+1

實際上其他方法的支持已經在HTML5中正式刪除了:http://www.w3.org/TR/2010/WD-html5-diff-20101019 /#changes-2010-06-24「不再支持使用PUT和DELETE作爲表單元素的HTTP方法。」 – ThiefMaster 2012-03-31 20:46:50

+0

@ThiefMaster - 支持僅在早期版本的HTML 5草案中添加。它從來沒有標準。 – Quentin 2012-03-31 20:48:38

回答

1

沒有其他方法預期包含以HTML表單旨在提供的方式組織的數據。

例如,DELETE可能會刪除操作屬性指向的任何資源。在這樣的請求中包含表單數據將毫無意義。

+0

因此,可以有一個帶有按鈕的空白表格標籤刪除資源...... – 2012-03-31 20:51:50

+1

PUT的規範說明它可以創建和更新資源。那麼,爲什麼不支持......? – 2012-03-31 20:52:56

+0

表單旨在收集用戶的輸入。 「我想刪除表單指向的URI」並不會在輸入方式上收集太多(並且不是很多人想要的東西)。 PUT將創建或覆蓋與上傳的任何URI。我想不出一個用於上傳x-form-urlencoded文檔的用例,以便它們可供下載。 – Quentin 2012-03-31 20:55:30

0

因爲回到當天,沒有流行的瀏覽器實現超越POST和GET的任何東西。

現在看來,讓瀏覽器製造商聚集在一起來標準化DELETE,PUT,PATCH等如何與表單一起工作似乎太麻煩了。即使我們能夠讓瀏覽器廠商達成一致,至少在十年前,足夠的用戶升級到足夠新的瀏覽器才能成爲主流。

請注意,有一些方法可以在逐個應用程序的基礎上解決此問題。 Ruby on Rails爲其form_tag helper提供了:method選項,允許通過簡單地使用帶有特殊參數的POST提交更多方法。

+0

但有JavaScript可以這樣做...... – 2012-03-31 20:56:59

+0

JavaScript(或更確切地說XMLHttpRequest對象)允許提交自定義製作的HTTP請求。他們可以有動態選擇的URI,任意的請求頭和你喜歡的任何消息體。這與提交表單數據集合有着天壤之別。 – Quentin 2012-03-31 20:59:38

+0

對,沒有標準化的方式來使用Javascript來分析DOM來找出表單內容,然後通過AJAX發送。你只需要遵循一個慣例,這通常只會做POST相同的事情。 – nertzy 2012-04-01 00:49:29

1

HTML始終只允許GET和POST作爲窗體的方法。其原因可能是因爲這兩個PUTDELETE意在影響由URI標識的,而不是指的是剛剛處理請求的資源的資源:

的POST的根本區別和PUT請求是 體現在Request-URI的不同含義中。 POST請求中的URI標識將處理封閉的 實體的資源。該資源可能是數據接受過程,某個其他協議的網關或接受註釋的單獨實體。 相比之下,PUT請求中的URI使用請求標識包含 的實體 - 用戶代理知道URI的目標是什麼,並且服務器不得嘗試將請求應用於某個其他資源。

[...]

原始服務器刪除由Request-URI標識的資源 的DELETE方法請求。該方法可能會被原始服務器上的人工干預(或其他方式)覆蓋。

這也需要Web服務器本身正確處理請求,處理其他方面,如身份驗證和授權。

相關問題