OPTIONS 请求的 Access-Control-Allow-Origin 值被覆盖

OPTIONS 请求的 Access-Control-Allow-Origin 值被覆盖

我正在尝试为多个子域启用 CORS,如下所建议: https://serverfault.com/a/1022028/593976

除 OPTIONS 请求外,其他一切正常。无论我做什么,当请求方法是 OPTIONS 时,Access-Control-Allow-Origin 都会设置为 *。

不确定这是否重要,但我在 Kubernetes 上使用 ingress-nginx。

在我看来,Nginx 有一些内部代码,这些代码在我应用所有配置后运行,如果请求方法是 OPTIONS,它会将 Access-Control-Allow-Origin 更改为 *。

如果有人知道发生了什么事,或者对如何解决这个问题有任何建议,请告诉我。

谢谢你!

答案1

为那些将来可能需要这个问题的人回答我自己的问题......

对我们有用的是删除以下注释:

nginx.ingress.kubernetes.io/cors-allow-credentials
nginx.ingress.kubernetes.io/cors-allow-methods
nginx.ingress.kubernetes.io/cors-allow-origin
nginx.ingress.kubernetes.io/enable-cors

并在代码片段中使用此代码动态设置标题:

nginx.ingress.kubernetes.io/configuration-snippet: |-
  if ($request_uri ~ ^/(.*)/swagger-ui.html) {
    return 403;
  }
  add_header Content-Security-Policy "frame-ancestors *";
  if ($http_origin ~* (https?://.*\.dev\.totvs\.io(:[0-9]+)?$)) {
    set $allow_origin $http_origin;
  }
  if ($http_origin ~* (https?://.*\.dev\.totvs\.app(:[0-9]+)?$)) {
    set $allow_origin $http_origin;
  }
  more_set_headers 'Access-Control-Allow-Origin: $allow_origin';
  more_set_headers 'Access-Control-Allow-Credentials: true';
  more_set_headers 'Access-Control-Allow-Methods: PUT, GET, PATCH, DELETE, POST, OPTIONS';
  more_set_headers 'Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
  # Cors Preflight methods needs additional options and different Return Code - UPDATED
  if ($request_method = 'OPTIONS') {
      more_set_headers 'Access-Control-Max-Age: 1728000';
      more_set_headers 'Content-Type: text/plain charset=UTF-8';
      more_set_headers 'Content-Length: 0';
      return 204;
  }

相关内容