São o PUT, DELETE, cabeça, etc métodos disponíveis na maioria dos navegadores da web?

StackOverflow https://stackoverflow.com/questions/165779

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:

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?

Foi útil?

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

métodos

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:

http://caniuse.com/#feat=xhr2

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top