程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了CORS 允许 * 但仍然在 POST 请求中得到 403大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决CORS 允许 * 但仍然在 POST 请求中得到 403?

开发过程中遇到CORS 允许 * 但仍然在 POST 请求中得到 403的问题如何解决?下面主要结合日常开发的经验,给出你关于CORS 允许 * 但仍然在 POST 请求中得到 403的解决方法建议,希望对你解决CORS 允许 * 但仍然在 POST 请求中得到 403有所启发或帮助;

这是我的问题。我的服务器配置为 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 的情况,但我找不到与我在这里遇到的问题类似的问题。知道这是什么原因吗?

解决方法

事实证明,问题不是我想象的那样,仅通过查看我最初发布的信息也无法弄清楚。万一曾经帮助过任何人,发生的事情如下:

数据库是 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,POST"
      - "traefik.http.middlewares.addAuth.headers.accesscontrolalloworiginlist=https://mywebsite.com"
      - "traefik.http.middlewares.addAuth.headers.accesscontrolallowheaders=X-requested-With,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 即可解决问题。

大佬总结

以上是大佬教程为你收集整理的CORS 允许 * 但仍然在 POST 请求中得到 403全部内容,希望文章能够帮你解决CORS 允许 * 但仍然在 POST 请求中得到 403所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。