Atributo action do HTML
O atributo action do HTML especifica para onde os dados do formulário devem ser enviados ao submetê-lo. Saiba em qual elemento este atributo pode ser usado.
O atributo action do HTML especifica a URL para onde os dados do formulário devem ser enviados quando o formulário é submetido. O seu valor é o destino que processa os dados enviados — geralmente um script ou endpoint do lado do servidor.
Você pode usar este atributo apenas no elemento <form>. Quando um usuário aciona um controle de envio, o navegador reúne os campos nomeados do formulário, os codifica e envia uma requisição para o endereço definido em action. Esta página explica como o action se comporta, o que acontece quando ele é omitido, como ele interage com outros atributos do formulário e como um único botão pode substituí-lo com formaction.
Sintaxe
<form action="URL"></form>A URL pode ser de dois tipos:
- Absoluta — uma URL completa incluindo o esquema e o host, por exemplo
https://api.example.com/submit. Use esta opção quando o formulário precisar enviar dados para uma origem diferente (um domínio, subdomínio ou esquema diferente). - Relativa — um caminho resolvido em relação à URL do documento atual, por exemplo
/form/submitousave.php. Esta é a escolha mais comum quando o formulário envia os dados de volta para o seu próprio site.
Exemplo
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
<form action="/form/submit">
<label for="fname">Name</label>
<input type="text" name="FirstName" id="fname" value="Mary"/><br /><br />
<label for="lname">Surname</label>
<input type="text" name="LastName" id="lname" value="Thomson"/><br /><br />
<input type="submit" value="Submit"/>
</form>
</body>
</html>Aqui usamos um caminho relativo, portanto os dados são enviados para /form/submit no mesmo domínio que a página atual. Para enviar para outro domínio, use uma URL absoluta como https://example.com/some-page.
O que acontece quando action é omitido
Se você omitir o action (ou definir como uma string vazia), o formulário é submetido para a URL da página atual. Este é um padrão válido e comum: uma página pode exibir o formulário e também processar sua própria submissão.
<!-- Both of these submit back to the URL the form was loaded from -->
<form method="post">...</form>
<form action="" method="post">...</form>Lembre-se de que submeter para a URL atual com o método GET padrão acrescenta os campos do formulário à URL como uma query string, recarregando a página com esses valores visíveis na barra de endereços.
Como action interage com outros atributos do formulário
O atributo action nunca funciona sozinho — ele define para onde os dados vão, enquanto outros atributos do <form> definem como eles chegam lá:
method— escolhe o método HTTP. ComGET(o padrão), os campos codificados são acrescentados à URL doactioncomo uma query string, de modo que a URL se tornaaction?name=value&.... ComPOST, os campos são enviados no corpo da requisição, mantendo a URL limpa.enctype— define como o corpo é codificado e só importa comPOST. O padrãoapplication/x-www-form-urlencodedé adequado para texto; você precisa demultipart/form-dataquando o formulário inclui um upload de arquivo (<input type="file">).target— decide onde a resposta é exibida, por exemplo_self(mesma aba, padrão),_blank(nova aba), ou o nome de um<iframe>.
Você pode saber mais sobre esses atributos na referência da tag <form> e no guia completo de formulários HTML.
URLs absolutas vs. relativas: considerações
Escolher entre uma action absoluta e uma relativa vai além de uma preferência de estilo:
- URLs relativas mantêm o formulário vinculado ao site que o serviu. Elas sobrevivem à migração do site para um novo domínio ou à troca entre
httpehttps, e mantêm o envio na mesma origem, evitando complicações de origem cruzada. - URLs absolutas são necessárias quando você precisa enviar dados para uma origem diferente (por exemplo, um processador de formulários de terceiros ou um host de API separado). Seja cuidadoso aqui: um
POSTpara outra origem é uma requisição de origem cruzada. O servidor receptor deve aceitá-la, e a requisição pode estar sujeita às regras de CORS para as partes com scripts da sua página.
Uma nota de segurança: os formulários podem enviar dados para qualquer origem que você colocar em action, e os navegadores enviarão os cookies dessa origem junto com a requisição. Este é exatamente o mecanismo por trás do cross-site request forgery (CSRF) — uma página maliciosa pode hospedar um formulário que envia dados para o seu site. Por isso, defina action apenas para origens em que você confia e proteja qualquer endpoint que altere estado com um token anti-CSRF validado no servidor. Prefira ações relativas (mesma origem) a menos que tenha um motivo concreto para enviar para outro lugar.
Substituindo action com formaction
Um único formulário pode ter mais de um botão de envio, e cada um pode enviar os dados para um lugar diferente usando o atributo formaction. Quando presente no botão ou input que acionou o envio, formaction substitui o action do próprio formulário. (Os atributos relacionados formmethod, formenctype e formtarget substituem method, enctype e target da mesma forma.)
<!DOCTYPE html>
<html>
<head>
<title>formaction example</title>
</head>
<body>
<form action="/articles/publish" method="post">
<label for="title">Title</label>
<input type="text" name="title" id="title" value="My draft"/><br /><br />
<!-- Uses the form's action: /articles/publish -->
<button type="submit">Publish</button>
<!-- Overrides the action just for this button -->
<button type="submit" formaction="/articles/save-draft">Save draft</button>
</form>
</body>
</html>Ambos os botões submetem os mesmos campos, mas "Publish" envia para /articles/publish enquanto "Save draft" envia para /articles/save-draft. O formaction é suportado em <button type="submit"> e <input type="submit"> (e <input type="image">), e não tem efeito em controles que não sejam de envio.