Reactjs 使用API与另一个来源(CORS)反应应用程序
我有一个react应用程序,它使用JavaEE后端rest服务器,运行在另一个域上。我已启用CORS:Reactjs 使用API与另一个来源(CORS)反应应用程序,reactjs,cookies,fetch,cross-domain,Reactjs,Cookies,Fetch,Cross Domain,我有一个react应用程序,它使用JavaEE后端rest服务器,运行在另一个域上。我已启用CORS: Access-Control-Allow-Origin : http://localhost:3000 Access-Control-Allow-Headers : origin, content-type, accept, authorization Access-Control-Allow-Credentials : true Access-Control-Allow-Methods :
Access-Control-Allow-Origin : http://localhost:3000
Access-Control-Allow-Headers : origin, content-type, accept, authorization
Access-Control-Allow-Credentials : true
Access-Control-Allow-Methods : GET, POST, PUT, DELETE, OPTIONS, HEAD
Access-Control-Max-Age : 1209600
我正在使用react with fetch,如下所示:
export function get(path, headers) {
return fetch(apiUrl + path, {
"metod" : "GET",
"headers" : headers,
"credentials" : "include"
})
}
我的react应用程序正在http://localhost:3000
。
当我登录时,服务器返回设置的Cookie,但除非我再次尝试登录,否则Cookie不会包含在对服务器的任何进一步请求中。然后,它将包含在该特定登录请求中
有什么建议吗?安装这个
一旦安装,点击他的浏览器并打开。就这些。您将不会收到更多错误
编辑。生产解决方案
如果您想从服务器上对其进行配置(或者干脆不添加浏览器扩展,请尝试以下操作:)
- 如果您使用的是node.js,请执行以下操作:node.js服务器文件:
response.writeHead(200,{'Content-Type':contentType,'Access-Control-Allow-Origin':'*'))
fetch('http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=8&q=http://rss.cnn.com/rss/editi关于_entertainment.rss?output=rss',{method'get',mode'no cors',})代码>
- 其他解决方案:如果您也使用PHP,则可以将:
添加到PHP文件中。如我所见,情况并非如此,所以。。。在您的服务器(例如:Apache)中,在设置中添加以下指令:Header set Access Control Allow Origin*(作为第一个选项)
因此,我通过使用另一个stackoverflow线程和robertklep的评论解决了这个问题。如上所述:“在本地主机上工作时,必须完全忽略cookie域。”。我实现了robertkleps的想法,但没有设置域。它产生了如下的Set Cookie:
Set Cookie:kek=7fukucsuji1n1ddcntc0ri4vi;版本=1;路径=/;最大年龄=100000
。这很好。如果您正在使用create react app
,只需将您的主API url代理添加到您的package.js
中,例如“代理”,我只想与大家分享一下我是如何让我的本地开发变得轻松的:http://localhost:8080/API“
无需在后端设置CORS 添加更多现有答案 使用react,您可以在package.json中使用“proxy”来避免CORS。 基本上,如果您需要访问
localhost:8100
(您的java后端)并且您的react应用程序运行在localhost:3000
您可以设置:
在您的package.json中
“代理”:http://localhost:8100"
然后,当您想访问/hello
,这将是java API的端点时,您可以执行以下操作:
从“axios”导入axios;
axios.get(“/endpoint”)
。然后(resp=>{
控制台日志(相应数据);
});
它将被重定向到http://localhost:8100/hello 因此,您将避免CORS。cookie在到期日、域、路径等方面是否有效?服务器将返回此cookieSet cookie:kek=qel4h9n27ov9ratshdrnqhrrhr;版本=1;放弃
,所以我会这么认为?尝试为cookie设置一个显式路径/
(而且,如果您想设置多个cookie,我认为您应该使用多个设置cookie
头)。我尝试更改路径,但结果相同。Cookie:设置Cookie:kek=9rev41dpo3eq337m389bb9mbe5;版本=1;路径=/;领域=http://localhost:8080; 最大年龄=100000
。我只使用了一个cookie。但这适合生产吗?当转移到生产时,您应该有相同的服务器。不是吗?当您为生产构建react应用程序时,您不再需要react脚本。