我正在尝试使用REST通过我的JavaScript代码连接到XYZ服务器。这里的规则是 我必须发送一个初始GET方法来获取(x-csrf-token,cookie)标头信息,该信息必须在POST标头中推送。我还必须为两个连接设置相同的用户名和密码。
令人惊讶的是,在我的POSTMAN中,模拟运行良好,但是,在浏览器中,第二个调用(即POST方法)始终失败,并出现错误“方法失败:(/ v1 //),代码为403-禁止的用户名/密码组合“]},”处理请求时出错“。我在这里提供日志消息的片段-我正在发送和接收的标头消息。
例如:我在GET中发送的标头信息如下,
019-04-27T09:04:41.542Z [DEBUG] Intiating GET Rest call to fetch header information...
2019-04-27T09:04:41.944Z [DEBUG] Header Info Sent: {
"x-csrf-token": "06vdhkkjahmPG-2dasfdg65hdkj",
"cookie": "JSESSIONID=DSeztrutriziZ66666ftzizu; Path=/http; Secure; HttpOnly"
}
我在POST中发送的标头信息是
2019-04-27T09:04:42.208Z [ERROR] POST Request is not successful.
2019-04-27T09:04:42.209Z [DEBUG] Header Info Sent : {
"Cookie": "JSESSIONID=DSeztrutriziZ66666ftzizu; Path=/http; Secure; HttpOnly",
"x-csrf-token": "06vdhkkjahmPG-2dasfdg65hdkj",
"Cache-Control": "no-cache",
"Content-Type": "application/json"
}
我收到的标头信息作为对我的POST的响应(在此处标记:x-csrf-token“:” required“)
2019-04-27T09:04:42.209Z [DEBUG] Header Info received in SAP response :{
"Date": "Sat, 27 Apr 2019 09:04:42 GMT",
"Content-Type": "text/html;charset=utf-8",
"Content-Length": "762",
"Connection": "keep-alive",
"Set-Cookie": "JSESSIONID=DSeztrutriziZ66666ftzizu; Path=/http; Secure; HttpOnly",
"x-csrf-token": "required",
"Content-Language": "en",
"Server": "XYZ",
"Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload"
}
我真的在堆栈溢出和其他地方仔细研究了所有与'x-csrf-token:required'相关的答案。没有人有令人满意的答案。我知道,诸如POSTMAN之类的工具具有较少的限制,因此它通常会向浏览器显示更多信息。但是,我仍然没有令人满意的理由相信为什么我的POST方法会因“ x-csrf-token”(特别是“ required”)而特别失败,因为我显然是在从前一个收到的POST调用中发送令牌GET电话。有什么理由相信我的用户名/密码在发布POST消息之前正在动态更改?
这可能是服务器XYZ没有列出我的原因,这就是我失败的原因吗?但是在那种情况下,为什么我用最初的GET方法得到一个完美的200 OK响应,为什么POSTMAN显示正确的结果?
任何有用的答复都将受到赞赏。