Eu já vi algumas perguntas por aqui, como Como depurar serviços RESTful , que menciona:
Infelizmente, o mesmo navegador não me permite testar HTTP PUT, DELETE e, até certo ponto, até HTTP POST.
Também ouvi dizer que os navegadores suportam apenas GET e POST, de algumas outras fontes, como:
- http://www.packetizer.com/ws/rest.html
- http://www.mail-archive.com/[email protected]/msg13518.html
- http://www.xml.com/cs/user/view/cs_msg/1098
No entanto, alguns testes rápidos no Firefox mostram que o envio PUT
e as DELETE
solicitações funcionam conforme o esperado - a XMLHttpRequest
conclusão é bem-sucedida e a solicitação é exibida nos logs do servidor com o método correto. Há algum aspecto disso ausente, como compatibilidade entre navegadores ou limitações não óbvias?
http
cross-browser
browser
ajax
John Millikin
fonte
fonte
Respostas:
Não. A especificação do HTML 5 menciona:
Ou seja, os formulários HTML suportam apenas GET e POST como métodos de solicitação HTTP. Uma solução alternativa para isso é encapsular outros métodos através do POST usando um campo de formulário oculto que é lido pelo servidor e a solicitação enviada de acordo.
No entanto, GET , POST , PUT e DELETE são suportados pelas implementações do XMLHttpRequest (chamadas AJAX) em todos os principais navegadores da Web (IE, Firefox, Safari, Chrome, Opera).
fonte
Os formulários HTML suportam GET e POST. (Em algum momento, o HTML5 adicionou PUT / DELETE, mas eles foram descartados.)
XMLHttpRequest suporta todos os métodos, incluindo CHICKEN, embora alguns nomes de métodos sejam comparados entre maiúsculas e minúsculas (os métodos diferenciam maiúsculas de minúsculas por HTTP) e alguns nomes de métodos não são suportados por razões de segurança (por exemplo, CONNECT).
Os navegadores estão lentamente convergindo para as regras especificadas pelo XMLHttpRequest, mas, como o outro comentário apontou, ainda existem algumas diferenças.
fonte
XMLHttpRequest
é um objeto padrão no modelo de objeto JavaScript.Segundo a Wikipedia,
XMLHttpRequest
apareceu pela primeira vez no Internet Explorer 5 como um objeto ActiveX, mas foi transformado em um padrão e foi incluído para uso em JavaScript na família Mozilla desde 1.0, Apple Safari 1.2, Opera Safari 1.2, Opera 7.60-p1 e IE 7.0 .O
open()
método no objeto leva o método HTTP como um argumento - e é especificado como tomar qualquer método HTTP válido (ver o número do item 5 do link) - incluindoGET
,POST
,HEAD
,PUT
eDELETE
, como especificado pela RFC 2616 .Como observação lateral, o IE 7–8 permite apenas os seguintes métodos HTTP: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL" , "COPY", "LOCK", "UNLOCK" e "OPTIONS" .
fonte
_method
solução alternativa de campo ocultoUsado no Rails e pode ser adaptado a qualquer estrutura:
adicione um
_method
parâmetro oculto a qualquer formulário que não seja GET ou POST:Isso pode ser feito automaticamente em estruturas através do método auxiliar de criação de HTML (por exemplo, Rails
form_tag
)corrija o método de formulário real para POST (
<form method="post"
)processos
_method
no servidor e faça exatamente como se esse método tivesse sido enviado em vez do POST realJustificativa / histórico do motivo pelo qual não é possível: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
fonte
Acredito que esses comentários se refiram especificamente aos navegadores, ou seja, clicar em links e enviar formulários, não
XMLHttpRequest
.XMLHttpRequest
é apenas um cliente personalizado que você escreveu em JavaScript que usa o navegador como tempo de execução.ATUALIZAÇÃO: Para esclarecer, não quis dizer (apesar de escrever) que você escreveu
XMLHttpRequest
; Eu quis dizer que você escreveu o código que usaXMLHttpRequest
. Os navegadores não oferecem suporte nativoXMLHttpRequest
.XMLHttpRequest
vem do tempo de execução JavaScript, que pode ser hospedado por um navegador, embora não seja necessário (consulte Rhino ). É por isso que as pessoas dizem que os navegadores não suportamPUT
e,DELETE
porque na verdade é o JavaScript que os suporta.fonte
it's actually JavaScript that is supporting them
. Na verdade não é verdade.XMLHttpRequest
é um 'objeto de host', o que significa que é um objeto que expõe a funcionalidade do host ao código Javascript. Não faz parte do próprio JS.SIM , PUT, DELETE, HEAD etc Os métodos HTTP estão disponíveis em todos os navegadores modernos.
Para estar em conformidade com o XMLHttpRequest, os navegadores de nível 2 devem oferecer suporte a esses métodos. Para verificar quais navegadores suportam XMLHttpRequest Nível 2, recomendo CanIUse:
http://caniuse.com/#feat=xhr2
Somente o Opera Mini está sem suporte para atm (julho '15), mas o Opera Mini não tem suporte para tudo. :)
fonte
Apenas para adicionar - o Safari 2 e versões anteriores definitivamente não suportam PUT e DELETE. Tenho a impressão de que o fez 3, mas não tenho mais isso para testar. O Safari 4 definitivamente suporta PUT e DELETE.
fonte