【发布时间】:2021-08-04 08:14:31
【问题描述】:
我使用 Docker 和 Traefik 来管理调用 ElasticSearch API 的 ReactJS 应用程序。
这是我的 elasticsearch.yml 配置:
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled : true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: X-Requested-With,X-Auth-Token,Content-Type,Content-Length
http.cors.allow-credentials: true
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
这里是我的 Elasticsearch 服务的 docker-compose 条目:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.12.0
restart: always
volumes:
- ${DATA_FOLDER_ELASTICHSEARCH}:/usr/share/elasticsearch/data
- ./infra/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
environment:
- discovery.type=single-node
labels:
- "traefik.enable=true"
- "traefik.http.routers.elasticsearch.rule=Host(`myElastic.domain.com`)"
- "traefik.http.routers.elasticsearch.entrypoints=websecure"
- "traefik.http.routers.elasticsearch.middlewares=testHeader"
- "traefik.http.middlewares.testHeader.headers.accesscontrolallowmethods=GET,OPTIONS,POST"
- "traefik.http.middlewares.testHeader.headers.accesscontrolalloworiginlist=*"
- "traefik.http.middlewares.testHeader.headers.accesscontrolmaxage=100"
- "traefik.http.middlewares.testHeader.headers.addvaryheader=true"
networks:
- myNetwork
如果我调用我的 ElasticSearch API(例如使用 Postman 在/myIndex/_search 上的简单 POST,我有我的响应标头:
Access-Control-Allow-Origin : *
Vary : Origin
但是我在使用 fetch 的 React 应用程序上仍然存在 CORS 问题(现在我直接使用我的 react 中的 ElasticSearch API)。
我需要更改 fetch api 的任何内容吗?
编辑
查看CORS: Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true,似乎我无法使用* 来定义我的允许域,所以我放了:
- "traefik.http.middlewares.testHeader.headers.accesscontrolalloworiginlist=https://reactApp.domain.com"
但没有成功......在我的 Chrome 控制台中,我收到了这条消息:
preflight wildcard origin not allowed
【问题讨论】:
-
假设您的 React 应用因为
http.cors.allow-credentials: true而暴露于 http 凭据,您是否检查了应用 allow for cross site access control 发送的请求? -
不幸的是没有改变:(