Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
JerryWang
Advisor
Advisor
0 Kudos
When I am doing a test of comparison between Stateful and Stateless BSP application ( mentioned in blog Stateless and Stateful – Different behavior in application side ), I meet with a strange issue.
The conclusion is stateful BSP application will handle request sequentially. Suppose in client I send two request A and B to server. Request A takes 3 seconds to finish and B 2 seconds.



The request is sent via jQuery API.

It means for stateful application, I will observe the following timeline in Chrome network tab:

1. the start time of both request are almost the same, since I send out two request in client code almost at the same time.

2. even though the second request itself takes 2 seconds to finish, the total processing time for it is 3 seconds waiting for A to finish first + 2 seconds = 5 seconds in the end.



The above test did verify the conclusion.

However when I change the approach to send request into ES6 fetch API,


<%@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>

the testing request for stateful application looks as below this time:



The two requests are handled simultaneously ( request B only takes 2 seconds to finish, no 3 seconds' wait time for A to finish this time ), the response of second request returns first before the first, which could be observed in console:



why the latest ES6 API causes such discrepancy with known conclusion?

Just compare the cookie of requests sent via these two kinds of API:




Through comparison I get to know that the session cookie

sap-contextid is not sent together with request triggered by ES6 Fetch API.

Then in Fetch documentation I find out that I need to add option credentials: "include".



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);
});
}

After this change the stateful BSP application behaves as expected: the requests are handled in sequence.