Javascript-ECMA6-Fetch详解

Posted wanxiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript-ECMA6-Fetch详解相关的知识,希望对你有一定的参考价值。

Fetch

由于Fetch API是基于Promise设计,因此旧的浏览器并不支持该API,需要引用时引用es6-promise。

基本知识

  • fetch请求返回response格式
    • body

Fetch特性

跨域安全请求头

  • Accept
  • Accept-Language
  • Content-Language
  • Content-Type

跨域安全请求方法

  • GET
  • HEAD
  • POST

禁止用户设置的请求头

  • Accept-Charset
  • Accept-Encoding
  • Access-Control-Request-Headers
  • Access-Control-Request-Method
  • Connection
  • Content-Length
  • Cookie
  • Cookie2
  • Date
  • DNT
  • Expect
  • Host
  • Keep-Alive
  • Origin
  • Referer
  • TE
  • Trailer
  • Transfer-Encoding
  • Upgrade
  • Via

在请求中设置任何一个以上请求头时,浏览器会报错

index.html:16 Refused to set unsafe header "Accept-Encoding"

也就是说,这些属性只能被浏览器控制。

mode

可选值:

-same-origin

只能同域名内访问。

-no-cors

no-cors模式下,heades基本不可修改,只有部分字段支持修改

1.Accept

2.Accept-Language

3.Content-Language

4.Content-Type只能设置为application/x-www-form-urlencoded,multipart/form-data和text-plain中的任意一种。

no-cors模式下,限制使用GET,HEAD,POST方法。

-cors

credentials

  • omit(默认值)
  • include
  • same-origin

fetch不同浏览器的实现

  • Safari

safari在6.1+版本里,通过window.fetch内置实现了fetch。

关于CORS(Cross-Origin Resource Share)

跨域简单请求

当请求仅包含以下几种情况时属于简单请求,浏览器不会下发预请求:

  • GET
  • HEAD
  • POST
  • Accept
  • Accept-Language
  • Content-Language
  • Content-Type(值为applica/x-www-form-urlencoded, multipart/form-data, text/plain)

跨域预请求

除跨域简单请求外的任何请求,客户端默认发送options预请求。

例外
针对以下非简单请求所属content-type可选值,服务端允许不通过预请求直接访问:

  • application/csp-report
  • application/report
  • application/expect-ct-report+json
  • application/xss-auditor-report
  • application/ocsp-request

其他注意事项

  • 跨域请求一定包含Origin字段,然而包含Origin字段的不一定是跨域请求,可能是除GET和HEAD之外的其他请求。
  • 服务器建议使用403状态拒绝客户端预请求。
  • credentials值为‘include‘时,‘`Access-Control-Allow-Origin‘字段不能设置为通配符。

以上是关于Javascript-ECMA6-Fetch详解的主要内容,如果未能解决你的问题,请参考以下文章

JAVA分代收集机制详解

JVM中的堆的新生代老年代永久代详解

2垃圾回收算法(标记清除算法复制算法标记整理算法和分代收集算法),各种垃圾收集器讲解(学习笔记)

JVM系列之.JVM内存模型如何正确运用操作?本文详解

JVM系列之.JVM内存模型如何正确运用操作?本文详解

GC之详解CMS收集过程和日志分析