2009-12-06 133 views
27

我想知道如何在瀏覽器中執行除POST/GET以外的其他功能(?HTML表單或Ajax)的最終答案(?),因爲我聽到混合報告什麼瀏覽器允許什麼(特別是在ajax方面)。從瀏覽器中執行HTTP PUT

當以REST風格構建後端時,很好使用PUT,HEAD,OPTIONS等適當的動詞...在rails中,隱藏表單字段方法(IIRC?)用於模擬此操作,並在後端發送給相應的動詞控制器。現在(2009年末)是否有必要?什麼是公約?

回答

32

似乎大多數瀏覽器不支持除GET和POST之外的其他方法,因爲它是HTML表單的限制。 下面是關於該主題的另一個問題:

Are the PUT, DELETE, HEAD, etc methods available in most web browsers?

爲了模擬PUT,DELETE等方法,你可以隱藏的輸入添加到正規的GET/POST形式與僞法和有正如你所提到的那樣,你的應用程序將它翻譯,以便你的控制器看到它,就好像它是一個真正的PUT請求。我已經看到這種方法在谷歌sitebricks中使用(在Java中 - 對不起,我沒有任何特定於軌道的引用,但這可能至少會給你一個想法)在this code.我認爲這可能是我們堅持的方法HTML規範中的一些變化(以及帶有它的瀏覽器)

但是,主要瀏覽器在AJAX中支持GET,POST,PUT和DELETE,所以如果不依賴於隱藏輸入在HTML表單上。

+0

不錯 - 希望將這些鏈接在一起將有助於爲未來尋找這樣的事情的其他人提供谷歌果汁。 – 2009-12-07 22:04:34

+0

我還應該補充一點,我相信PUT和DELETE是根據HTML5支持的:http://www.w3.org/TR/html5/forms。html#form-submission-0 (不知道HEAD不過)。 – mpobrien 2009-12-07 22:09:30

+2

我認爲AJAX比起初建議的「隧道效應」要好很多。 另外,關於HTML5的好處。但我不清楚哪些瀏覽器支持PUT和刪除表單在這一點上。 – 2009-12-08 23:07:06

6

您必須使用AJAX來執行除GET和POST之外的任何操作,我會推薦jQuery Forms插件來允許您將表單作爲PUT提交。

5

HTTP有4個GET,POST,PUT,UPDATE。但大多數瀏覽器只支持GET和POST。通過請求發送附加參數來模擬PUT和UPDATE。在rails中_method =「PUT」或_method =「UPDATE」。

3

我相信這個問題的首選解決方案是使用X-HTTP-Method-Override標頭。如果你搜索這個術語,你應該找到很多關於如何使用它的例子。

1

我想你會發現許多防火牆阻止了一些較酷的HTTP動詞。所以,雖然它可能適用於你,但如果你想爲公司網站上的普通大衆創造一些東西,你可能想要堅持基本的東西。

+0

好點 - 同樣適用於「奇數」標題。 – 2009-12-07 22:01:13

1

除了ajax生成的請求之外,獲取這些附加方法的另一種方法是使用webdav客戶端。文件系統客戶端存在於所有主要的操作系統中,並且還有一些額外的客戶端可以支持它用於網絡創作。

例如,Amaya網絡瀏覽器允許您使用PUT方法編輯Web上的文檔並將其直接保存到服務器。在其他瀏覽器上有這樣的插件,並且一些Web圖形編輯器(例如Dreamweaver)也支持WebDAV。

除了HTTP1.1中定義的方法以外,WebDAV還支持許多其他方法供自己使用。