目录

🥤 JavaScript Fetch API

关于 Fetch 发送请求的一些选项 API。

一个包含完全可能个 fetch 选项及默认值的列表:

let promise = fetch(url, {
  method: "GET", // POST,PUT,DELETE,等。
  headers: {
    // 内容类型 header 值通常是自动设置的
    // 取决于 request body
    "Content-Type": "text/plain;charset=UTF-8"
  },
  body: undefined // string,FormData,Blob,BufferSource,或 URLSearchParams
  referrer: "about:client", // 或 "" 以不发送 Referer header,
  // 或者是当前源的 url
  
  referrerPolicy: "no-referrer-when-downgrade", // no-referrer,origin,same-origin...
  mode: "cors", // same-origin,no-cors
  credentials: "same-origin", // omit,include
  cache: "default", // no-store,reload,no-cache,force-cache,或 only-if-cached
  redirect: "follow", // manual,error
  integrity: "", // 一个 hash,像 "sha256-abcdef1234567890"
  keepalive: false, // true
  signal: undefined, // AbortController 来中止请求
  window: window // null
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# referrer / referrerPolocy

这些选项决定了 fetch 如何设置 HTTP 的 Referer header。通常,这个 header 是被自动设置的,并包含了发出请求的页面的 url。在大多数情况下,它一点也不重要,但有时出于安全考虑,删除或缩短它是有意义的。

  • ** referer 选项允许设置任何 Referer (在当前域的),或者移除它。** 要不发送 referer,可以将 referer 设置为空字符串:

    fetch('/page', {
      referrer: "" // 没有 Referer header
    });
    
    1
    2
    3

    设置在当前域内的另一个 url:

    fetch('/page', {
      // 假设目前在 https://now.info
      // 可以设置任何 Referer header,但必须是在当前域内的
      referrer: "https://now.info/anotherpage"
    });
    
    1
    2
    3
    4
    5
  • referrerPolicy 选项为 Referer 设置一般的规则。

    请求分为是那种类型:同源请求;跨源请求;从 HTTPS 到 HTTP 的请求 (从安全协议到不安全协议)。

    referrer 选项允许设置确切的 Referer 值不同, referrerPolicy 告诉浏览器针对各个请求类型的一般的规则。

# mode

mode 选项是一种安全措施,可以防止偶发的跨源请求。

# credentials

credentials 选项指定 fetch 是否应该随请求发送 cookie 和 HTTP-Authorization header。

# cache

默认情况下, fetch 请求使用标准的 HTTP 缓存。就是说,它遵从 ExpiresCache-Control header,发送 If-Modified-Since ,等。就像常规的 HTTP 请求那样。

使用 cache 选项可以忽略 HTTP 缓存或者对其用法进行微调。

# redirect

通常来说, fetch 透明地遵循 HTTP 重定向,例如 301,302 等。

redirect 选项允许对此进行更改。

# integrity

integrity 选项允许检查响应是否与已知的预先校验和相匹配。

# keepalive

keepalive 选项表示该请求可能会在网页关闭后继续存在。

📢 上次更新: 2022/09/02, 10:18:16