为什么在$ http.get()中收到的set-cookie标头不用于后续的$ http请求?

时间:2019-01-15 08:56:56

标签: javascript angularjs cookies

我的代码执行一个GET请求,完成后then()执行一个附加请求(后)。

这是代码

let app = angular.module('myApp', []);
      app.controller('controller', function ($scope, $http) {
        $http.get("http://localhost:8006/one.php",  { withCredentials: true })
           // I can see in the browser inspector the Set-Cookie response header 
           .then(function (response) {
            $scope.myWelcome = response.data;
            // Before this POST is made, a pre-flight OPTIONS is made. No "Cookie" header is sent with this, and a new Set-Cookie is received
            $http.post("http://localhost:8006/two.php", { withCredentials: true })
            // This POST doesn't include Cookie headers either, and the response sends yet another Set-Cookie header.
                  .then(function (anotherResponse) {
                    console.log(anotherResponse.data);
                  })
            });
      });

这导致向服务器发出三个请求。 (第一个GET,一个OPTIONS飞行前请求,最后一个POST)。

我看到在每个,我都得到了一个不同 Set-Cookie标头。 (由于它是一个会话cookie,因此始终用于同一cookie,如果浏览器已根据请求发送了cookie,则不会发送该cookie。)

例如: Set-Cookie PHPSESSID=526tl5rbilqjosn74kf07a7a9r; path=/

我想说的是,在第一个get()调用之后,在then()方法上发出的请求将包含Cookie标头,但没有。

如果我重新加载页面,那么将使用第一个请求(GET一个)的值来设置cookie,但是我需要在第一个GET之后的调用上发送该cookie。发生在then()

浏览器网络检查器中发生的三个请求:

network inspector

这是第一个GET请求:

GET request

这是OPTIONS飞行前的请求:

OPTIONS request

这是最后一个POST请求:

POST request

如您所见,我在每个请求中得到Set-Cookie,而在任何请求上都没有发送Cookie标头。重新加载后,Cookie标头将正常发送。

0 个答案:

没有答案