--- title: fetch() slug: Web/API/fetch translation_of: Web/API/fetch tags: - API - Experimental - Fetch - Fetch API - GlobalFetch - Method - Reference - request browser-compat: api.fetch --- {{APIRef("Fetch API")}} O método global **`fetch()`** inicia o processo de busca de um recurso da rede, retornando uma promessa que é cumprida assim que a resposta estiver disponível. A promessa é resolvida para o objeto {{domxref("Response")}} que representa a resposta à sua solicitação. A promessa _não_ rejeita erros de HTTP - apenas rejeita erros de rede. Você deve usar os manipuladores `then` para chechar erros de HTTP. `WindowOrWorkerGlobalScope` é implementado por {{domxref("Window")}} e {{domxref("WorkerGlobalScope")}}, o que significa que o método `fetch()` está disponível em praticamente qualquer contexto no qual você queira buscar recursos. Uma promessa {{domxref("fetch()")}} só é rejeitada quando um erro de rede é encontrado (que é geralmente quando há um problema de permissão ou similar). Uma promessa {{domxref("fetch()")}} _não_ rejeita erros HTTP (`404`, etc.). Em vez disso, um manipulador `then()` deve checar as propriedades {{domxref("Response.ok")}} e/ou {{domxref("Response.status")}}. O método `fetch()` é controlado pela diretiva `connect-src` da [Content Security Policy](/pt-BR/docs/Web/HTTP/Headers/Content-Security-Policy) em vez da diretiva dos recursos que está recuperando. > **Note:** Os parâmetros do método `fetch()` são idênticos > aos do construtor {{domxref("Request.Request","Request()")}}. ## Sintaxe ```js const fetchResponsePromise = fetch(resource [, init]) ``` ### Parâmetros - `resource` - : Isto define o recurso que você deseja buscar. Isto pode ser: - String ou qualquer outro objeto com um [stringifier](/en-US/docs/MDN/Contribute/Howto/Write_an_API_reference/Information_contained_in_a_WebIDL_file#stringifiers) — incluindo um objeto {{domxref("URL")}} — que fornece a URL do recurso que você deseja buscar. - Um objeto {{domxref("Request")}}. - `init` {{optional_inline}} - : Um objeto contendo quaisquer configurações customizadas que você deseja aplicar à solicitação. As opções possíveis são: - `method` - : O método da requisição, por exemplo `GET`, `POST`. Observe que o cabeçalho {{httpheader("Origin")}} não é definido em requisições Fetch com um método de {{HTTPMethod("HEAD")}} ou {{HTTPMethod("GET")}}. (Este comportamento foi corrigido no Firefox 65 — consulte {{bug(1508661)}}). - `headers` - : Qualquer cabeçalho que você queira adicionar à sua requisição, contido dentro de um objeto {{domxref("Headers")}} ou um objeto literal com valores {{jsxref("String")}}. Observe que [alguns nomes são proibidos](/en-US/docs/Glossary/Forbidden_header_name). - `body` - : Qualquer corpo que você queira adicionar à sua requisição: podendo ser um {{domxref("Blob")}}, {{domxref("BufferSource")}}, {{domxref("FormData")}}, {{domxref("URLSearchParams")}}, {{domxref("USVString")}}, ou um objeto {{domxref("ReadableStream")}}. Note que uma requisição usando os métodos `GET` or `HEAD` não pode ter um corpo. - `mode` - : O modo que deseja usar para a requisição, por exemplo, `cors`, `no-cors`, ou `same-origin`. - `credentials` - : Controla o que os navegadores fazem com as credenciais ([cookies](/pt-BR/docs/Web/HTTP/Cookies), entradas de [Autenticação HTTP](/pt-BR/docs/Web/HTTP/Authentication), e certificados de cliente TLS). Deve ser uma das seguintes strings: - `omit` - : Diz aos navegadores para excluir credenciais da requisição, e ignorar quaisquer credenciais enviadas de volta na resposta (por exemplo, qualquer cabeçalho {{HTTPHeader("Set-Cookie")}}). - `same-origin` - : Diz aos navegadores para incluir credenciais com requisições para URLs da mesma origem, e usar quaisquer credenciais enviadas de volta nas respostas de URLs da mesma origem. - `include` - : Diz aos navegadores para incluir credenciais em ambas requisições `same-origin` e `cross-origin`, e sempre use as credenciais enviadas de volta nas respostas. > **Note:** As credenciais podem ser incluídas em requisições cross-origin simples e "finais", mas não devem ser incluídas em [requisições de comprovação de CORS](/en-US/docs/Web/HTTP/CORS#preflight_requests_and_credentials). - `cache` - : Uma string indicando como a requisição vai interagir como o [cache HTTP](/pt-BR/docs/Web/HTTP/Caching) do navegador. Os valores possíveis, `default`, `no-store`, `reload`, `no-cache`, `force-cache`, e `only-if-cached`, estão documentados no artigo para a propriedade {{domxref("Request/cache", "cache")}} do objeto {{domxref("Request")}}. - `redirect` - : Como lidar com uma resposta `redirect`: - `follow`: Segue os redirecionamentos automaticamente. A menos que esteja definido de outra forma, o redirecionamento é definido, por padrão, como `follow`. - `error`: Aborta com um erro se o redirecionamento ocorrer. - `manual`: O autor da chamada pretende processar a resposta em outro contexto. Veja [WHATWG fetch standard](https://fetch.spec.whatwg.org/#requests) para mais informações. - `referrer` - : Uma {{domxref("USVString")}} especificando o referenciador da requisição. Isso pode ser uma URL same-origin, `about:client`, ou uma string vazia. - `referrerPolicy` - : Especifica a [referrer policy](https://w3c.github.io/webappsec-referrer-policy/#referrer-policies) para usar para a requisição. Pode ser `no-referrer`, `no-referrer-when-downgrade`, `same-origin`, `origin`, `strict-origin`, `origin-when-cross-origin`, `strict-origin-when-cross-origin` ou `unsafe-url`. - `integrity` - : Contém o valor [subresource integrity](/en-US/docs/Web/Security/Subresource_Integrity) da requisição (por exemplo, `sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=`). - `keepalive` - : A opção `keepalive` pode ser usada para permitir que a requisição sobreviva à página. A busca com a flag `keepalive` é uma substituição para a API {{domxref("Navigator.sendBeacon()")}}. - `signal` - : Uma instância de objeto {{domxref("AbortSignal")}}; permite comunicar com uma requisição fetch e abortá-la, se desejado, por meio de um {{domxref("AbortController")}}. ### Valor de retorno Uma {{jsxref("Promise")}} que resolve para um objeto {{domxref("Response")}}. ### Exceções - `AbortError` - : A requisição foi abortada devido a uma chamada ao {{domxref("AbortController")}} ou ao método {{domxref("AbortController.abort", "abort()")}}. - `TypeError` - : Pode ocorrer pelos seguintes motivos:
Motivo | Exemplos de falha |
---|---|
Nome do cabeçalho inválido |
// space in "C ontent-Type" const headers = { "C ontent-Type": "text/xml", "Breaking-Bad": "<3" }; fetch('https://example.com/', { headers }); |
Valor do cabeçalho inválido. O objeto header deve conter exatamente dois elementos. |
const headers = [ ["Content-Type", "text/html", "extra"], ["Accept"], ]; fetch('https://example.com/', { headers }); |
URL inválida ou esquema, ou está usando um esquema que fetch não suporta, ou está usando um esquema que não é suportado por um modo de requisição específico. |
fetch('blob://example.com/', { mode: 'cors' }) |
URL que inclui credenciais |
fetch('https://user:password@example.com/') |
URL de referência inválida |
fetch('https://example.com/', { referrer: './abc\u0000df' }) |
Modos inválidos (navigate and websocket ) |
fetch('https://example.com/', { mode: 'navigate' }) |
Se o modo de cache da requisição é "only-if-cached" e o modo da requisição é diferente de "same-origin". |
fetch('https://example.com/', { cache: 'only-if-cached', mode: 'no-cors' }) |
Se o método da requisição for um token de nome inválido ou um dos cabeçalhos proibidos: CONNECT, TRACE or TRACK |
fetch('https://example.com/', { method: 'CONNECT' }) |
Se o modo da requisição é "no-cors" e o método da requisição não é um método CORS-safe-listed (GET, HEAD ou POST) |
fetch('https://example.com/', { method: 'CONNECT', mode: 'no-cors' }) |
Se o método da requisição é GET ou HEAD e o corpo não for nulo(null) ou undefined. |
fetch('https://example.com/', { method: 'GET', body: new FormData() }) |
Se fetch gera um erro de rede. |