São o PUT, DELETE, cabeça, etc métodos disponíveis na maioria dos navegadores da web?
-
03-07-2019 - |
Pergunta
Eu vi algumas perguntas por aqui como Como depurar serviços RESTful , que menciona:
Infelizmente isso mesmo navegador não vai permitir-me para testar HTTP PUT, DELETE, e até certo ponto ainda HTTP POST.
Eu também ouvi 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/jmeter-user@jakarta.apache.org/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 DELETE
pedidos funciona como esperado - os concluída XMLHttpRequest
com êxito, eo pedido revela-se nos logs do servidor com o método certo. Existe algum aspecto a este que estou perdendo, tais como a compatibilidade cross-browser ou limitações não-óbvias?
Solução
No. A HTML 5 especificação menciona:
O método e conteúdo formmethod atributos são enumerados atributos com as seguintes palavras-chave e estados:
A palavra-chave get , mapeamento para o GET estado, indicando o HTTP GET método. O método GET só deve solicitar e recuperar dados e não deve ter nenhum outro efeito.
A palavra-chave pós , o mapeamento para o estado POST, indicando o método HTTP POST. Os pedidos método POST que o servidor aceitar os dados do formulário submetido para ser processado, o que pode resultado em um item que está sendo adicionado a um banco de dados, a criação de um novo web recursos página, a atualização da página já existente, ou a totalidade do resultados mencionados.
A palavra-chave diálogo , o mapeamento para o diálogo de estado, indicando que submetendo a forma destina-se a fechar a caixa de diálogo em que o formulário se encontra, se houver, e de outra forma não enviar.
O padrão valor inválido para esses atributos é o estado GET
i. formulários HTML único apoio GET e POST como HTTP métodos de solicitação. Uma solução para isso é para túnel outros métodos através de POST usando um campo de formulário oculto que é lido pelo servidor eo pedido enviado em conformidade.
No entanto, GET , POST , PUT e Excluir são apoiado por as implementações de XMLHttpRequest (ou seja, chamadas AJAX) em todos os principais navegadores (IE, Firefox, Safari, Chrome, Opera).
Outras dicas
HTML forma GET apoio e POST. (HTML5 em um ponto adicionado PUT / DELETE, mas aqueles foram retiradas.)
XMLHttpRequest suporta todos os métodos, incluindo frango, embora alguns nomes de métodos são comparados com caso insensível (métodos são maiúsculas de minúsculas por HTTP) e alguns nomes de métodos não são suportados em tudo por razões de segurança (por exemplo Connect).
Os navegadores estão lentamente convergindo para as regras especificadas por XMLHttpRequest, mas como o outro comentário apontou ainda existem algumas diferenças.
XMLHttpRequest
é um objeto padrão no modelo de objeto JavaScript.
De acordo com a Wikipedia, XMLHttpRequest
apareceu pela primeira vez no Internet Explorer 5 como um objeto ActiveX , mas desde então tem sido feito em um padrão e foi incluído para uso em JavaScript na família Mozilla desde 1.0, Apple Safari 1.2, Opera 7.60-p1, e IE 7.0.
A método open()
no objeto leva o método HTTP como um argumento - e é especificado como tomar qualquer método válido HTTP (ver o número do item 5 do link) - incluindo GET
, POST
, HEAD
, PUT
e DELETE
, como < a href = "https://tools.ietf.org/html/rfc2616#section-5.1.1" rel = "nofollow noreferrer"> especificado pela RFC 2616 .
Como uma nota lateral IE 7-8 só permitem os seguintes métodos HTTP: "GET", "POST", "Cabeça", "PUT", "delete", "mOVE", "PROPFIND", "PROPPATCH", "MKCOL", "CÓPIA", "LOCK" "UNLOCK" e "Opções" .
Eu acredito que esses comentários se referem especificamente aos navegadores, ou seja, clicar em links e envio de formulários, não XMLHttpRequest
. XMLHttpRequest
é apenas um cliente personalizado que você escreveu em JavaScript que usa o navegador como um tempo de execução.
UPDATE: Para esclarecer, eu não queria dizer (apesar de eu escrever) que você escreveu XMLHttpRequest
; Eu quis dizer que você escreveu o código que utiliza XMLHttpRequest
. Os navegadores não suporta nativamente XMLHttpRequest
. XMLHttpRequest
vem do tempo de execução de JavaScript, que pode ser hospedado por um navegador, embora não seja obrigado a estar (ver Rhino ). É por isso que as pessoas dizem navegadores não suportam PUT
e DELETE
-porque é realmente JavaScript que é apoiá-los.
_method
escondido campo solução
Usado em Rails e pode ser adaptado a qualquer estrutura:
-
adicionar um parâmetro
_method
escondida a qualquer forma que não seja GET ou POST:<input type="hidden" name="_method" value="DELETE">
Isso pode ser feito automaticamente em estruturas através do método auxiliar criação HTML (por exemplo Rails
form_tag
) -
fixar o método de forma real para POST (
<form method="post"
) -
processos
_method
no servidor e fazer exatamente como se esse método tinha sido enviado em vez do POST real
Justificativa / história de por que não é possível: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms
YES , PUT, DELETE, HEAD etc HTTP estão disponíveis em todos os navegadores modernos.
Para ser compatível com XMLHttpRequest Nível 2 navegadores must apoiar estes métodos. Para verificar quais os navegadores suportam XMLHttpRequest Nível 2 Eu recomendo CanIUse:
Apenas Opera Mini está faltando atm apoio (julho '15), mas o Opera Mini não tem suporte para tudo. :)
Só para acrescentar - Safari 2 e anteriores definitivamente não apoiar PUT e DELETE. Tenho a impressão de 3 fez, mas eu não tê-lo em torno de teste mais. Safari 4 definitivamente não suporte PUT e DELETE.