2009-12-06 3 views
27

Я хотел бы знать, что является окончательным (?) Ответом, как делать что-то другое, кроме POST/GET из браузера - либо HTML-форму, либо Ajax, поскольку я слышу смешанные отчеты по какие браузеры допускают (в частности, на стороне ajax).Выполнение HTTP PUT из браузера

При создании задней части в стиле RESTful приятно использовать правильные глаголы, как PUT, HEAD, OPTIONS и т.д ... в рельсах, скрытая форма поля называется метод (IIRC?) Используется для имитации этого, а на задней стороне - отправка соответствующему контроллеру для глагола. Это сейчас (в конце 2009 года)? какие конвенции?

ответ

32

Похоже, что большинство браузеров не поддерживают другие методы, кроме GET и POST, поскольку это ограничение HTML-форм. Вот еще один вопрос по теме:

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

Для того, чтобы смоделировать PUT, DELETE и т.д. методы, вы можете добавить скрытый вход в обычной форме в GET/POST с псевдо-метода и имеют ваше приложение переводит его так, чтобы ваши контроллеры видели его, как если бы это был истинный запрос PUT, как вы упомянули. Я видел этот метод, используемый в google sitebricks (в java - извините, у меня нет ссылки на рельсы, но это может по крайней мере дать вам идею) в this code. Я думаю, что это, вероятно, метод, за которым мы застряли до тех пор, пока что-то в изменении спецификации HTML (и в браузерах с ним)

Однако GET, POST, PUT и DELETE поддерживаются в AJAX основными браузерами, поэтому нет необходимости в скрытом вводе, если вы не полагаетесь в форме HTML.

+0

Ницца - надеюсь, связывание их вместе поможет соку google для других, которые ищут такие вещи в будущем! –

+0

Я также должен добавить, что я считаю, что PUT и DELETE поддерживаются в соответствии с HTML5: http://www.w3.org/TR/html5/forms.html # форма-подчинение-0 (не уверен что HEAD однако). – mpobrien

+2

Я думаю, что AJAX намного лучше, чем «туннелирование», которое вы предлагаете вначале. Также, хороший момент о HTML5. Но я не понимаю, какие браузеры поддерживают PUT и DELETE для форм на этом этапе. –

6

Вы должны использовать AJAX, чтобы делать что-либо кроме GET и POST, я бы порекомендовал плагин jQuery Forms, чтобы вы могли отправить форму в виде PUT.

5

HTTP имеет 4 GET, POST, PUT, UPDATE. Но большинство браузеров поддерживают только GET и POST. PUT и UPDATE моделируются путем отправки дополнительных параметров в запрос. В рельсах это _method = "PUT" или _method = "UPDATE".

3

Я считаю, что предпочтительным решением этой проблемы является использование заголовка X-HTTP-Method-Override. Если вы ищете этот термин, вы должны найти множество примеров того, как его использовать.

1

Я думаю, вы найдете много брандмауэров, блокирующих некоторые из более сложных HTTP-глаголов. Поэтому, хотя это может сработать для вас, если вы пытаетесь создать что-то для широкой общественности, потребляемой с корпоративных сайтов, вы, вероятно, захотите придерживаться основ.

+0

Хорошая точка - то же самое относится и к «нечетным» заголовкам. –

1

Помимо запросов, созданных ajax, другим способом получения этих дополнительных методов является клиент webdav. клиенты файловой системы существуют для всех основных операционных систем, и есть несколько дополнительных клиентов, которые могут поддерживать его для веб-разработки.

Например, веб-браузер Amaya позволяет редактировать документы в Интернете и сохранять их непосредственно на сервере с использованием метода PUT. Для этого есть плагины для других браузеров и несколько веб-графических редакторов, таких как Dreamweaver, также поддерживающие WebDAV.

WebDAV также поддерживает ряд других методов, помимо методов, определенных в HTTP1.1, для собственного использования.