--- title: Fetch 基本概念 slug: Web/API/Fetch_API/Basic_concepts translation_of: Web/API/Fetch_API/Basic_concepts ---
{{DefaultAPISidebar("Fetch API")}}{{draft}}
Fetch 是一个现代的概念, 等同于 XMLHttpRequest。它提供了许多与XMLHttpRequest相同的功能,但被设计成更具可扩展性和高效性。本文介绍了 Fetch API的一些基本概念。
Note: 这篇文章可能还需要修改。如果你觉得有的概念可以解释的更好,让人们在MDN论坛上知道,或 Mozilla IRC (#mdn room)。
Fetch 的核心在于对 HTTP 接口的抽象,包括 {{domxref("Request")}},{{domxref("Response")}},{{domxref("Headers")}},{{domxref("Body")}},以及用于初始化异步请求的 {{domxref("GlobalFetch.fetch","global fetch")}}。得益于 JavaScript 实现的这些抽象好的 HTTP 模块,其他接口能够很方便的使用这些功能。
Service Workers 是大量使用Fetch的API的一个示例。
除此之外,Fetch 还利用到了请求的异步特性——它是基于 {{jsxref("Promise-based","Promise")}} 的。
Guard 是 {{domxref("Headers")}} 对象的特性,基于不同的情况,它可以有以下取值:immutable、
request、
request-no-cors、
response 或
none。
当使用 {{domxref("Headers.Headers","Headers()")}} {{glossary("constructor")}} 创建一个新的 {{domxref("Headers")}} 对象的时候,它的 guard 被设置成 none(默认值)。当创建
{{domxref("Request")}} 或 {{domxref("Response")}} 对象的时候,它将拥有一个按照以下规则实现的与之关联的 {{domxref("Headers")}} 对象:
新对象的类型 | 创建时的构造函数 | 关联的 {{domxref("Headers")}} 对象的 guard |
---|---|---|
{{domxref("Request")}} | {{domxref("Request.Request","Request()")}} | request |
{{domxref("Request.Request","Request()")}},{{domxref("Request.mode","mode")}} 设置成 no-cors |
request-no-cors |
|
{{domxref("Response")}} | {{domxref("Response.Response","Response()")}} | response |
{{domxref("Response.error","error()")}} 或 {{domxref("Response.redirect","redirect()")}} 方法 | immutable |
头信息的 guard 会影响 {{domxref("Headers.set","set()")}}、{{domxref("Headers.delete","delete()")}} 和 {{domxref("Headers.append","append()")}} 方法。如果你试图修改 guard 是 immutable 的
{{domxref("Headers")}} 对象,那么会抛出一个 TypeError。以下情况则不会抛出错误:
request
并且头信息中的 name 不是 {{Glossary("forbidden header name")}}request-no-cors
并且头信息中的 name/value 是 {{Glossary("simple header")}}response
并且头信息中的 name 不是 {{Glossary("forbidden response header name")}}