带有反应前端的播放框架java后端不返回正确的http响应

Posted

技术标签:

【中文标题】带有反应前端的播放框架java后端不返回正确的http响应【英文标题】:Play framework java backend with react front end doesnt return proper http response 【发布时间】:2019-04-19 19:08:01 【问题描述】:

下面是我的 application.conf 文件。并注意原因,有几行是,我尝试了几种组合来解决这个问题。但找不到任何修复。

在 React 前端获取 API 调用

fetch('http://localhost:9000/items', 
        method: 'GET'
).then(
    response => response.json()
).then(
    data => 
        console.log(data);
    
).catch(
    error => 
        console.error(error);
        console.log('errr');
    
);

Application.conf 文件

play.filters.hosts 
   allowed = ["."]

play.filters.disabled += "play.filters.headers.SecurityHeadersFilter"
play.filters.disabled += play.filters.cors.CORSFilter
play.filters.disabled += play.filters.csrf.CSRFFilter
play.filters.headers.contentSecurityPolicy = "default-src 'self'; img-src 'self' https://my.img.cdn.com"
# disable the built in filters
# play.http.filters = play.api.http.NoHttpFilters
play.filters.enabled += "play.filters.cors.CORSFilter"
play.filters.cors 
  # allow all paths
  pathPrefixes = ["/"]
  # allow all origins (You can specify if you want)
  allowedOrigins = null
  allowedHttpMethods = ["GET", "POST", "PUT", "DELETE"]
  # allow all headers
  allowedHttpHeaders = ["Accept", "Content-Type"]

下图显示了响应前端请求的选项请求。

以下是控制台中的错误和警告。

然后检查删除 http 请求中的标头。然后通过在网络选项卡中发送 GET 请求得到 200。但是在 fetch api 调用中抛出了异常

所以看起来应该是 play API 中的一个 cors 问题。但无法通过对应用程序配置进行不同的更改来弄清楚。

【问题讨论】:

为什么 CORS 过滤器同时出现在您的配置中的启用和禁用列表中? 只是做个测试。不过,问题已解决,感谢您的评论。 【参考方案1】:

我已经解决了这个问题,下面将是答案。

play.filters.enabled += "play.filters.cors.CORSFilter"

play.filters.cors 
  allowedOrigins = ["http://localhost:8080", "http://localhost:9000"]
  allowedHttpMethods = ["GET", "POST", "PUT", "DELETE"]
  preflightMaxAge = 3 days

希望这对任何人都有帮助。

【讨论】:

以上是关于带有反应前端的播放框架java后端不返回正确的http响应的主要内容,如果未能解决你的问题,请参考以下文章

前后端分离与前后端不分离

前后端分离与前后端不分离的区别

前后端分离与不分离的区别总结

web的应用模式

vue发布中的前后端分离和前后端不分离

Django前后端不分离&前后端分离&模板引擎