当前位置: 首页 > 知识库问答 >
问题:

CORS cookie适用于get请求,但不适用于Angular2中的post

赫连卓
2023-03-14

我正在尝试将angular2应用程序与rails api连接起来。

为了使用rails身份验证,我希望能够在两个域之间共享cookies。当我在angular应用程序中调用http GET时,我会返回一个带有预期设置cookie字段的响应,当我发送下一个GET请求时,cookie也会随之发送。然而,当我将第二个GET替换为一个POST时,它不是。对于两个调用,我都使用withCredentials=true。

当我调用以下内容时:

let options : RequestOptionsArgs = {};
options.withCredentials = true;
this.http.get(this.baseUrl + 'sessions/login_attempt' ,options)
  .toPromise();

我可以在chrome开发工具中看到cookies发送的请求头:

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Cookie:request_method=GET; _commandsapp_session=SlRJdHdPQ3dadG94RDFWYmIxVWNnZnZUMzRwSU5pMjhoQ1NWV1loN2lNWUdIMTFrNmZyV2dJcWV4RHZON0p6WTJRcVRNSU8zM3BXV0dIWnJ4QXpYaEdSYUVLR1cvT3N6Wm1XNWxUVDJ6c3ltbll1dk9OSFdJdDZIdW5SM25BYTdOSGtwelhGU0NDRG1WZXQwSzlHZCt3PT0tLWwrc1BrWVA5Tk84ZEU4VE8zcUQ4L0E9PQ%3D%3D--f201c0d6e0fe67de323a10fb521614d165a50964
Host:0.0.0.0:3000
Origin:http://127.0.0.1:4200
Referer:http://127.0.0.1:4200/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36

然而,当我用post替换它并添加一个主体时,我看不到chrome正在发送cookies。

let options : RequestOptionsArgs = {};
    options.withCredentials = true;
    this.http.post(this.baseUrl + 'sessions/login_attempt', {'username_or_email': 'admin', 'login_password':'password'} ,options)
      .toPromise();

chrome开发工具中的请求头:

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:0.0.0.0:3000
Origin:http://127.0.0.1:4200
Referer:http://127.0.0.1:4200/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36

共有1个答案

干善
2023-03-14

第二个请求是预检选项请求,您必须在浏览器发出POST请求(将包括cookie)之前,使用发出POST请求的权限对其进行响应。

 类似资料:
  • 关于redash,我有一个问题。这是请求。在上,它工作得很好。查询示例: 但在axios上,它抛出: 网络错误 并在控制台上写: 访问XMLHttpRequest at

  • 问题内容: 我从html中接收来自用户的一堆输入,然后将其传递给ajax查询以获取响应。 这是满足上述要求的Flask代码。 上面的方法无法通过get找到到“报告”的路线。但是,它可以在POST请求中找到它。 这是我得到的日志 错误的请求..我在这里做错了什么? 问题答案: GET请求没有 (*),并且不是JSON编码的,而是URL编码的(普通,常规键值对)。 这意味着您可以简单地使用jQuery

  • 我使用ASP.NET MVC4(VS2010 SP1,Windows 7)创建了一个网页。它也有一个api通过什么我可以做一个搜索或上传一些东西(数据和文件)。当我在VS2010 SP1的开发服务器上部署页面时,一切都正常工作,但当我选择IIS(IIS7)时,api不再工作。“issuccessStatusCode”似乎是假的。但是页面本身可以工作,可以从其他机器访问。 这是我用于内置开发服务器的

  • 当我试图通过邮递员发送时,我有一个请求正在正常工作。我试图实现相同的使用代码,我面临一个错误。 我正在使用的代码- 我得到的错误是- org.springframework.web.client.HttpClientErr异常$未授权: 401未授权 但《邮递员》中同样的作品也有同样的细节。 我想说明一下 后端API不在我手里。 clientid,clientSecret,access_token

  • 当我使用POST方法向我的服务器发出多部分请求时,请求工作正常。 下面是我如何设置我的JMeter: 发帖请求 然而,当我试图向同一个URL发出PUT请求时,该请求不起作用。 提交请求 服务器上的错误是 org.springframework.web.multipart.MultipartException:当前请求不是多部分请求 这似乎是JMeter上的一个问题,因为当我尝试使用Postman执

  • 切换状态方法 但是,如果我删除*ngIf 将会工作。 理论上,ngIF检查它是否为真。该元素将在DOM上可用。根据我的理解,元素也应该具有非活动状态,因为它没有被触发。单击触发器后,元素将可用,并将具有活动状态。 但是为什么它没有任何动画呢? 有什么工作可以让我使用ngIf和动画吗?