前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES6 Fetch API和Cookie相关的知识点

ES6 Fetch API和Cookie相关的知识点

作者头像
Jerry Wang
发布2019-06-05 17:15:36
5950
发布2019-06-05 17:15:36
举报

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1442797

Jerry Wang曾经写过一篇比较web应用处于stateful和stateless不同状态下的行为差异,发表在SAP社区上:

https://blogs.sap.com/2017/03/31/stateless-and-stateful-different-behavior-in-application-side/

结论就是stateful的BSP应用会通过串行方式依次处理传进来的请求。

看这个例子,客户端发送A和B两个请求给服务器,两个请求分别需要3秒和2秒完成。

对于stateful BSP应用来说,因为是串行处理,所以第二个请求实际上需要3+2=5秒才能从服务器端返回,这一点在Chrome开发者工具的network标签里观察得很清楚。

大家能发现上图的客户端请求发送我用的是jQuery。当我换成ES6的fetch API时,我发现一切不再工作了。

源代码如下:

代码语言:javascript
复制
<%@page language="abap" %>
<%@extension name="htmlb" prefix="htmlb" %>
<!DOCTYPE html>
<html>
<head>
<title>Jerry Test Stateful</title>
</head>
<body>
<button onclick="fire()">Fire two request</button>
<script>
function wrapperOnFetch(url){
  fetch(url).then(function(response){
    return response.json();
  }).then(function(json){
      console.log(url + ":" + json.message);
  });
}
function fire(){
  wrapperOnFetch("first.json");
  wrapperOnFetch("second.json");
}
</script>
</body>
</html>

此时,stateful BSP应用对这两个请求的处理表现得像并行处理一样。

为了找到引起jQuery和ES6 fetch API的差异原因,我比较了两种发送的HTTP请求,发现了一些差异:

通过jQuery.ajax方法发送的请求,带有Cookie:

而ES6 fetch API发送的则没有:

在fetch的官方文档里发现了一个参数:

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

credentials: “include”.

代码语言:javascript
复制
function wrapperOnFetch(url){
 // enable session cookie sent with request
  fetch(url,{ credentials:"include" }).then(function(response){
    return response.json();
  }).then(function(json){
      console.log(url + ":" + json.message);
  });
}

带上之后,fetch API的请求也带有期望的cookie,并且之后行为完全和jquery的AJAX方法一致了:同时到达服务器的两个请求按照串行方式依次被处理。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年06月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档