Поддержка браузера HTTP-гейтов с тонкозернистым сохранением

Есть ли какие-либо данные о том, как браузеры фактически поддерживают HTTP-глаголы покоя (особенно PUT, DELETE). Этот вопрос в основном обусловлен тем фактом, что многие источники (такие как qaru.site/info/111125/...) сообщают, что большинство браузеров не поддерживают PUT и DELETE, но не говорят, что именно.

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

Ответ 1

Когда сомневаетесь, спросите Анну:

http://annevankesteren.nl/2007/10/http-method-support

Это на пару лет, но он дает чистый счет здоровья PUT и DELETE, но он также пытается использовать различные случаи более неясных глаголов, таких как TRACE и PROPFIND:

Ван Кестерен протестировал Firefox 3, Opera 9.5 и Internet Explorer 7, сочетание предварительных релизов и выпусков. GET и POST работали так, как ожидалось, и все поддерживали стандартный набор методов http из RFC 2616. Есть некоторые проблемы с корпусом, поэтому вы должны всегда стараться придерживаться верхнего регистра; TRACE и OPTIONS являются краевыми случаями с проблемами, обнаруженными в Firefox и Opera соответственно. CONNECT и TRACE и SEARCH являются проблематичными для IE. Имейте в виду, что это было написано в 2007 году, поэтому YMMV.

Я думаю, что вся путаница над браузерами, не поддерживающая другие, кроме GET и POST, проистекает из того факта, что в спецификации HTML перечислены только эти два в HTML <form> элемент:

Атрибут метода элемента FORM указывает метод HTTP, используемый для отправки формы обработчику. Этот атрибут может принимать два значения:

  • get: с помощью метода "get" HTTP набор данных формы добавляется к URI, указанному атрибутом действия (с вопросительным знаком ( "?" ) в качестве разделителя), и этот новый URI отправляется к обрабатывающему агенту.

  • post: С помощью метода "post" HTTP набор данных формы включается в тело формы и отправляется обработчику.

Именно по этой причине браузеры поддерживают только GET и POST в HTML; поскольку стандарт говорит об этом.

Текущая (январь 2014 г.) спецификация XMLHttpRequest, с другой стороны, явно указывает, что методы запроса должны разрешаться с некоторыми исключениями (CONNECT, TRACE или TRACK) и что методы RFC2616 должны быть в верхнем регистре:

\ 6. Если метод является нечувствительным к регистру совпадением для CONNECT, DELETE, GET, HEAD, OPTIONS, POST, PUT, TRACE или TRACK, вычесть 0x20 из каждого байта в диапазоне 0x61 (ASCII a) до 0x7A (ASCII z).

Если это не соответствует ни одному из приведенных выше, оно передается буквально, в том числе в последнем запросе.

EDIT Другой источник, который пришел к более или менее такому же выводу: XMLHttpRequest поддерживает PUT и DELETE: http://jshirley.vox.com/library/post/xmlhttprequest-and-rest.html (предупреждение, неработающая ссылка на май 2014 года).

РЕДАКТИРОВАТЬ Вопрос был задан до, но ответы на два года все еще актуальны.

РЕДАКТИРОВАТЬ Краткое резюме на странице Anne van Kesteren с 2007 года и добавлен раздел по HTML vs XMLHttpRequest

Ответ 2

См. страницу PutDeleteSupport в Atom Wiki. Возможно, вам будет интересно просматривать другие страницы Atom Wiki, связанные с HTTP.