--- title: WindowOrWorkerGlobalScope.fetch() slug: Web/API/fetch translation_of: Web/API/WindowOrWorkerGlobalScope/fetch original_slug: Web/API/WindowOrWorkerGlobalScope/fetch ---
O método fetch() do mixin {{domxref("WindowOrWorkerGlobalScope")}} inicia um processo de busca de um recurso da rede. Este, retorna uma promessa que resolve o objeto {{domxref("Response")}} que representa a resposta a sua requisição.
WorkerOrGlobalScope é implementado por {{domxref("Window")}} e {{domxref("WorkerGlobalScope")}}, o que significa que o método fetch() está disponível em praticamente qualquer contexto em que você possa querer obter recursos.
Uma promessa {{domxref("WindowOrWorkerGlobalScope.fetch","fetch()")}} rejeita com um {{jsxref("TypeError")}} quando um erro de rede é encontrado, embora isso geralmente signifique um problema de permissões ou similar. Uma verificação precisa de um fetch() bem-sucedido incluiria a verificação de uma promessa resolvida, e depois verificando se a propriedade {{domxref("Response.ok")}} possui valor true. Um status HTTP 404 não constitui um erro de rede.
O método fetch() é controlado pela diretiva connect-src da Content Security Policy em vez da diretiva dos recursos que está recuperando.
Nota: Os parâmetros do método fetch() são idênticos aos do construtor {{domxref("Request.Request","Request()")}}.
Promise<Response> fetch(input[, init]);
blob: e data: como esquemas.method: Método HTTP, por exemplo, GET, POST.headers: Qualquer cabeçalho que você queira adicionar à sua requisição, contido dentro de um objeto {{domxref("Headers")}} ou um objeto literal com valores {{domxref("ByteString")}}.body: Qualquer corpo que você queira adicionar à sua requisição: podendo ser um {{domxref("Blob")}}, {{domxref("BufferSource")}}, {{domxref("FormData")}}, {{domxref("URLSearchParams")}}, ou um objeto {{domxref("USVString")}}. Note que uma requisição usando os métodos GET ou 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: A credencial que deseja usar para a requisição: omit, same-origin, ou include. Para enviar automaticamente cookies para o domínio atual, esta opção deve ser fornecida. Começando com o Chrome 50, essa propriedade também usa uma instância {{domxref("FederatedCredential")}} ou uma instância {{domxref("PasswordCredential")}}.cache: O modo de cache que deseja usar na requisição: default, no-store, reload, no-cache, force-cache, ou only-if-cached.redirect: O modo de redirecionamento pode usar: follow (segue automaticamente o redirecionamento), error (aborta com um erro se ocorrer um redirecionamento), ou manual (manipula redirecionamentos manualmente). No Chrome o padrão foi follow antes do Chrome 47 e manual a partir do Chrome 47.referrer: Um {{domxref("USVString")}} especificando no-referrer, client, ou uma URL. O padrão é client.referrerPolicy: Especifica o valor do cabeçalho HTTP referer. Pode ser um destes: no-referrer, no-referrer-when-downgrade, origin, origin-when-cross-origin, unsafe-url.integrity: Contém o valor de integridade de subrecurso da requisição (por exemplo, sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=).signal: Uma instância do objeto {{domxref("FetchSignal")}}; permite que você se comunique com um pedido de busca e controle-o através de um {{domxref("FetchController")}}. {{non-standard_inline}}observe: Um objeto {{domxref("ObserverCallback")}} — o objetivo exclusivo deste objeto é fornecer uma função de retorno de chamada que é executada quando a solicitação fetch é executada. Isto retorna um objeto {{domxref("FetchObserver")}} que pode ser usado para recuperar informações sobre o status de uma solicitação fetch. {{non-standard_inline}}Uma {{domxref("Promise")}} que resolve um objeto {{domxref("Response")}}.
| Tipo | Descrição |
|---|---|
TypeError |
Desdo o Firefox 43, fetch()lançará um TypeError se a URL tiver credenciais, como http://user:password@example.com. |
In our Fetch Request example (see Fetch Request live) we create a new {{domxref("Request")}} object using the relevant constructor, then fetch it using a fetch() call. Since we are fetching an image, we run {{domxref("Body.blob()")}} on the response to give it the proper MIME type so it will be handled properly, then create an Object URL of it and display it in an {{htmlelement("img")}} element.
var myImage = document.querySelector('img');
var myRequest = new Request('flowers.jpg');
fetch(myRequest).then(function(response) {
return response.blob();
}).then(function(response) {
var objectURL = URL.createObjectURL(response);
myImage.src = objectURL;
});
In our Fetch with init then Request example (see Fetch Request init live) we do the same thing except that we pass in an init object when we invoke fetch():
var myImage = document.querySelector('img');
var myHeaders = new Headers();
myHeaders.append('Content-Type', 'image/jpeg');
var myInit = { method: 'GET',
headers: myHeaders,
mode: 'cors',
cache: 'default' };
var myRequest = new Request('flowers.jpg');
fetch(myRequest,myInit).then(function(response) {
...
});
Note that you could also pass the init object in with the Request constructor to get the same effect, e.g.:
var myRequest = new Request('flowers.jpg', myInit);
You can also use an object literal as headers in init.
var myInit = { method: 'GET',
headers: {
'Content-Type': 'image/jpeg'
},
mode: 'cors',
cache: 'default' };
var myRequest = new Request('flowers.jpg', myInit);
| Specification | Status | Comment |
|---|---|---|
| {{SpecName('Fetch','#fetch-method','fetch()')}} | {{Spec2('Fetch')}} | Defined in a WindowOrWorkerGlobalScope partial in the newest spec. |
| {{SpecName('Fetch','#dom-global-fetch','fetch()')}} | {{Spec2('Fetch')}} | Initial definition |
| {{SpecName('Credential Management')}} | {{Spec2('Credential Management')}} | Adds {{domxref("FederatedCredential")}} or {{domxref("PasswordCredential")}} instance as a possible value for init.credentials. |
{{CompatibilityTable}}
| Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|---|
| Basic support | {{CompatChrome(42)}} | 14 | {{CompatGeckoDesktop(34)}}[1] {{CompatGeckoDesktop(39)}} {{CompatGeckoDesktop(52)}}[2] |
{{CompatNo}} | 29 28[1] |
{{CompatNo}} |
| Streaming response body | {{CompatChrome(43)}} | 14 | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Support for blob: and data: |
{{CompatChrome(48)}} | {{CompatNo}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
referrerPolicy |
{{CompatChrome(52)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | 39 | {{CompatUnknown}} |
signal and observer |
{{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }}[3] | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
| Feature | Android | Android Webview | Edge | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|---|
| Basic support | {{CompatNo}} | {{CompatChrome(42)}} | 14 | {{CompatGeckoMobile(52)}}[2] | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} | {{CompatChrome(42)}} |
| Streaming response body | {{CompatNo}} | {{CompatChrome(43)}} | 14 | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatChrome(43)}} |
Support for blob: and data: |
{{CompatNo}} | {{CompatChrome(43)}} | {{CompatNo}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatChrome(43)}} |
referrerPolicy |
{{CompatNo}} | {{CompatChrome(52)}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | 39 | {{CompatUnknown}} | {{CompatChrome(52)}} |
signal and observer |
{{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }}[3] | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} | {{ CompatNo }} |
[1] API is implemented behind a preference.
[2] fetch() now defined on {{domxref("WindowOrWorkerGlobalScope")}} mixin.
[3] Hidden behind a preference in 55+ Nightly. In about:config, you need to create two new boolean prefs — dom.fetchObserver.enabled and dom.fetchController.enabled — and set the values of both to true.