Мелкозернистая поддержка браузера 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.