我知道此问题已被问过一千次,但我似乎无法弄清楚为什么一个获取请求有效但另一个没有。
我得到的错误:"否' 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',
}
})
}
这非常重要,非常感谢你的帮助!
答案 0 :(得分:1)
这些请求之间存在关键差异。第一个似乎是向客户端服务器发出与源相同的请求。这就是您的网址只是/api/user
的原因。当客户端向同一来源的服务器发出请求时,您不需要在URL中包含原点,并且CORS没有问题。
您的第二个网址http://localhost:5000/api/user
也包含了网址的来源。现在,您的第一个URL可能由于代理而工作,或者由于客户端由同一服务器提供服务。
在代理的情况下,包括原点将通过代理给你一个CORS错误。
如果第二个请求转到另一个服务器,则需要确保服务器允许来自此客户端的请求。
希望这有帮助。