【问题标题】:CORS Allows * but still getting a 403 on the POST requestCORS 允许 * 但仍然在 POST 请求中收到 403
【发布时间】:2021-07-14 07:56:51
【问题描述】:

这是我的问题。我的服务器配置了 CORS,并且预检请求工作正常:

$> curl 'https://db.mywebsite.com/something/_search' -X 'OPTIONS' ...

< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< Allow: GET,POST
< Content-Length: 0
< Content-Type: text/plain; charset=UTF-8
< Date: Tue, 20 Apr 2021 06:18:36 GMT

如您所见,它设置为允许每个来源(因为允许正确的来源不起作用,我尝试使用 * 并且问题仍然存在。)

但在发出后续实际请求时,我得到的是:

$> curl 'https://db.mywebsite.com/something/_search' -X 'POST' -H 'origin: https://mywebsite.com/' ...

< HTTP/1.1 403 Forbidden
< Access-Control-Allow-Origin: *
< Content-Length: 0
< Date: Tue, 20 Apr 2021 06:20:02 GMT

有趣的是,如果我删除 origin 标头,它可以正常工作,因此这排除了 403 来自后端服务器。

当我在网上寻找类似的问题时,我只会在预检请求得到 403 的情况下结束,但我找不到与我在这里面临的任何类似的情况。知道这可能是由于什么原因吗?

【问题讨论】:

    标签: http elasticsearch cors traefik


    【解决方案1】:

    事实证明,问题不是我想象的那样,仅通过查看我最初发布的信息是不可能弄清楚的。万一这对任何人都有帮助,发生的事情如下:

    数据库是 ElasticSearch,它被配置为使用以下配置启用 CORS:

    http:
      cors:
        enabled: true
        allow-credentials: true
        allow-origin: "https://mywebsite.com"
        allow-headers: "X-Requested-With, Content-Type, Content-Length, Authorization"
        allow-methods: "PUT, OPTIONS, POST"
    

    在理智的时候,它由 Traefik 提供服务,它也被配置为使用 CORS 标头进行响应:

      elasticsearch:
        image: elasticsearch:7.12.0
        labels:
          - "traefik.enable=true"
          - "traefik.http.middlewares.addAuth.headers.accesscontrolallowmethods=PUT, OPTIONS, POST"
          - "traefik.http.middlewares.addAuth.headers.accesscontrolalloworiginlist=https://mywebsite.com"
          - "traefik.http.middlewares.addAuth.headers.accesscontrolallowheaders=X-Requested-With, Content-Type, Content-Length, Authorization"
          - "traefik.http.routers.db.middlewares=addAuth"
          - "traefik.http.routers.db.rule=Host(`db.mywebsite.com`)"
          - "traefik.http.routers.db.tls=true"
          - "traefik.http.routers.db.tls.certresolver=myresolver"
          - "traefik.port=9200"
    

    事实证明,同时运行两种配置,Traefik 可以很好地处理预检请求,转发实际请求,然后 ElasticSearch 拒绝它。

    只需在 ElasticSearch 中删除 CORS 配置并依赖 Traefik 即可解决问题。

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2015-03-09
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 2017-03-15
      • 2012-12-31
      相关资源
      最近更新 更多