Reactjs 使用API与另一个来源(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 :

我有一个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 : 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://r‌​ss.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在到期日、域、路径等方面是否有效?服务器将返回此cookie
    Set cookie:kek=qel4h9n27ov9ratshdrnqhrrhr;版本=1;放弃
    ,所以我会这么认为?尝试为cookie设置一个显式路径
    /
    (而且,如果您想设置多个cookie,我认为您应该使用多个
    设置cookie
    头)。我尝试更改路径,但结果相同。Cookie:
    设置Cookie:kek=9rev41dpo3eq337m389bb9mbe5;版本=1;路径=/;领域=http://localhost:8080; 最大年龄=100000
    。我只使用了一个cookie。但这适合生产吗?当转移到生产时,您应该有相同的服务器。不是吗?当您为生产构建react应用程序时,您不再需要react脚本。