Мелкозернистая поддержка браузера HTTP-глаголов

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

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

2 ответа

Решение

Если сомневаетесь, спросите Анну:

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> элемент:

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

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

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

Это причина, почему браузеры поддерживают только 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).

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

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

РЕДАКТИРОВАТЬ Вопрос был задан ранее, конечно, но двухлетние ответы по-прежнему действительны.

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

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

Другие вопросы по тегам