【问题标题】:Fetch GET request unhandled rejection获取 GET 请求未处理的拒绝
【发布时间】:2021-10-19 18:05:41
【问题描述】:

我正在 JS 中向后端发出基本请求(仅检查用户实例是否存在,并将返回布尔值(真/假)以防止在需要时返回完整的用户数据)

从同行告诉我的情况来看,不建议通过路径传递敏感数据(在这种情况下是人们的电子邮件),并且应该通过正文(我还没有调查原因)无论如何,我的方式将其配置为包含在主体中,如下所示:

GET http://localhost:8080/User/check
Content-Type: application/json
{
  "email" : "B.Nye@ABC.uk"
}

但是在 JS 中执行此调用时:

  if (isAuthenticated){
    console.log("test -----------")
    console.log(user.email)
    fetch("http://###.###.###.###:8080/User/check", {
       method: "GET", 
       headers:{"Content-Type":"application/json"},
       body: JSON.stringify( {
          email: "B.Nye@ABC.uk"
       })
       
  }).then((result)=> {
    if (result.ok){
      console.log("sucess")
    }
    else{
      console.log("fail")
  }})}

我收到此错误:

未处理的拒绝(TypeError):无法在“窗口”上执行“获取”:使用 GET/HEAD 方法的请求不能有正文。

有没有办法绕过这个问题,或者我是否仅限于使用 POST 方法并修改我的后端方法或在路径中包含用户电子邮件?

【问题讨论】:

标签: javascript json get backend crud


【解决方案1】:

首先如果你想使用body,你应该使用POST方法。这就是 Fetch API 不断向您发送错误的原因。

第二个问题是,为什么我们在发送电子邮件、密码等敏感数据时不使用 GET 方法。答案是,整个 URL 是缓存用户的浏览器历史记录,它可能会暴露用户的敏感数据。如果你使用 POST 方法会更安全,因为它可以防止通过查询字符串泄漏数据(你是在正文中发送数据)。

【讨论】:

  • 如果攻击者捕获到请求,不管是GET还是POST,如果是SSL加密,查询字符串也会被加密
  • 你是对的,但我认为如果我们使用 GET 方法来传递敏感的东西,我们会让攻击者很容易,但最后如果攻击者捕获了请求,这对你来说并不重要'我说过。
猜你喜欢
  • 1970-01-01
  • 2018-02-27
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多