解决Elasticsearch相关CORS问题

CoderCraber
• 阅读 343

解决Elasticsearch相关CORS问题

运行环境

我用Java编写了一个带有Elastic Search的后端,并使用Maven进行构建和管理。

部署的运行环境是基于Google Cloud Platform(GCP)的。我在此环境中使用Google的Elasticsearch API,并将API部署到Google App Engine (GAE)上。此外,我也在本地环境中运行和测试。

问题描述

在我运行应用程序和进行开发的过程中,我遇到了一个有趣的问题。当我在本地运行应用程序时,一切都正常,没有出现任何错误。然而,当我尝试通过前端访问部署在GCP上的项目时,我遇到了一个报错:

Access to fetch at 'https://XXX.aosnot.com/authenticate/guest' from origin 'https://master.XXX.amolifyapp.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

这是一个典型的CORS(跨域资源共享)错误,看起来似乎是由于我的应用程序试图从一个源(https://master.XXX.amolifyapp.com)访问另一个源(https://XXX.aosnot.com/authenticate/guest),但后者没有设置正确的CORS策略来允许这种访问。

然而,我发现这个问题实际上并非由CORS问题引起的,而是由于Elasticsearch服务的问题。

前提

当你接下来阅读的时候,请保证你已经完成了基本的CORS配置,例如proxy server, 或后端的CORS filter,或package.json的proxy设置(如果你现在正在处于本地开发环境并且使用reactJS)等等...确保不是你真的没有设置CORS!

解决方案

通过深入调查,我发现当我的Elasticsearch账号出现问题(例如密码错误),或者Elasticsearch服务下线时,整个应用程序都会崩溃,甚至会影响到与Elasticsearch无关的部分,比如登录和注册功能。此时,浏览器会显示出CORS错误,但这只是因为Elasticsearch服务没有正常响应,而不是因为存在真正的CORS问题。

是滴,你没有看错,尽管这种情况真的很少,但是本次报CORS错和真正的问题没有关系。

因此,解决这个问题的方法是检查Elasticsearch账号,并确保Elasticsearch服务处于运行状态。我需要确保我使用的Elasticsearch账号密码正确,没有被锁定或禁用。此外,我还需要确保Elasticsearch服务正在运行,没有下线或由于其他原因而不可用。

通过这种方法,我成功解决了这个问题,并使我的应用程序能够正常工作。我希望这篇文章能帮助到遇到类似问题的其他开发者。

可能原因分析(不确定)

这种错误的报CORS的报错信息往往是使用的API的内部没有handle一些问题导致的,在我的情况,可能是Elastic Search API,GAE,GCP,Maven,甚至可能是Chrome的问题,但是无法确定是哪一部分导致了错误报错。

对于开发者来说的建议

添加错误处理。比如说我的场景,就应该考虑到API不work的情况,开发的时候多多考虑,增加程序鲁棒性,就算像这样碰到特别小概率的corner case,也不会被这种莫名其妙的问题坏了一整个程序。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
3年前
Elasticsearch 5.5 入门必会(一)
前言安装搜索引擎过程中,我遇到了很多坑!发出来让各位绕道而行,后面都是用ES关键字来代替Elasticsearch,后面的搭建和使用都是在centos6.8环境下,本人使用的ES是5.5.0的版本,JDK使用1.8版本。相关文章:     Elasticsearch5.5入门必会之Javaclien
Stella981 Stella981
3年前
Hibernate纯sql查询结果和该sql在数据库直接查询结果不一致
问题:今天在做一个查询的时候发现一个问题,我先在数据库实现了我需要的sql,然后我在代码中代码:selectdistinctd.id,d.name,COALESCE(c.count_num,0),COALESCE(c.count_fix,0),COALESCE(c
Wesley13 Wesley13
3年前
NEO从源码分析看网络通信
_0x00前言_NEO被称为中国版的Ethereum,支持C和java开发,并且在社区的努力下已经把SDK拓展到了js,python等编程环境,所以进行NEO开发的话是没有太大语言障碍的。比特币在解决拜占庭错误这个问题时除了引入了区块链这个重要的概念之外,还引入了工作量证明(PoW)这个机智的解决方案,通过数学意义上的难题来保证每个
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
3年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
Stella981 Stella981
3年前
Elasticsearch6.7 Kibana6.7 Windows安装过程
一、前提条件  Java1.8.131以上SDK确认安装,不能是预览版(预览版时只能localhost访问,不能使用IP访问)  JAVA\_HOME环境变量设置OK二、Elasticsearch6.7安装  1、解压安装文件  2、config目录,修改elasticsearch.yml文件,设置cluster.name、node.na