--- title: WindowOrWorkerGlobalScope.fetch() slug: Web/API/WindowOrWorkerGlobalScope/fetch translation_of: 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
.