No' Access-Control-Allow-Origin'一个获取有效,另一个没有

时间:2018-05-02 14:09:23

标签: reactjs fetch

我知道此问题已被问过一千次,但我似乎无法弄清楚为什么一个获取请求有效但另一个没有。

我得到的错误:"否' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:3000'因此不允许访问。"

这是工作中的

let responseGoogle = (response) => {
  console.log(response)
  let lastName = response.profileObj.familyName
  let firstName = response.profileObj.givenName 
  let email = response.profileObj.email 
  let tokenid = response.googleId

  let userData={
    firstName: firstName,
    lastName: lastName,
    email: email,
    token_id: tokenid
  }

  window.location.replace("http://localhost:3000/")

  return fetch('/api/user', {
    method: 'post',
    body: JSON.stringify(userData),
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    }
  })
}

但是这个没有

handleClick = (name, symbol, price) => {
    this.props.setMessage()
    let userData={
      name: name,
      symbol: symbol,
      priceAtSubscription: price
    }
    console.log(JSON.stringify(userData))
    return fetch('http://localhost:5000/api/user', {
      method: 'post',
      body: JSON.stringify(userData),
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      }
    })
  }

这非常重要,非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

这些请求之间存在关键差异。第一个似乎是向客户端服务器发出与源相同的请求。这就是您的网址只是/api/user的原因。当客户端向同一来源的服务器发出请求时,您不需要在URL中包含原点,并且CORS没有问题。

您的第二个网址http://localhost:5000/api/user也包含了网址的来源。现在,您的第一个URL可能由于代理而工作,或者由于客户端由同一服务器提供服务。

在代理的情况下,包括原点将通过代理给你一个CORS错误。

如果第二个请求转到另一个服务器,则需要确保服务器允许来自此客户端的请求。

希望这有帮助。