Выполнение HTTP PUT из браузера - PullRequest
33 голосов
/ 07 декабря 2009

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

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

Ответы [ 6 ]

35 голосов
/ 07 декабря 2009

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

Доступны ли методы PUT, DELETE, HEAD и т. Д. В большинстве веб-браузеров?

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

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

6 голосов
/ 07 декабря 2009

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

4 голосов
/ 07 декабря 2009

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

3 голосов
/ 07 декабря 2009

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

1 голос
/ 07 декабря 2009

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

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

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

1 голос
/ 07 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...