将文件从前端传递到中间件会导致CORS问题



我在项目中使用react-node。我正在从笔记本电脑上传一个文件,前端应该将其发送到后端。虽然在我的本地上一切都很顺利,但当我在kubernetes上部署它时,我最终会出现以下错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://MY_BACKEND_LINK. (Reason: header ‘type’ is not allowed according to header ‘Access-Control-Allow-Headers’ from CORS preflight response)

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://MY_BACKEND_LINK. (Reason: CORS request did not succeed). Status code: (null).

Error TypeError: NetworkError when attempting to fetch resource

我的nginx入口文件如下所示:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gateway-ingress
annotations:
kubernetes.io/ingress.class: nginx
#nginx.ingress.kubernetes.io/rewrite-target: "/"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"
nginx.ingress.kubernetes.io/cors-allow-headers: "*"
nginx.ingress.kubernetes.io/cors-allow-origin: "$http_origin"
nginx.ingress.kubernetes.io/proxy-body-size: 50m
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "Access-Control-Allow-Origin: *";
spec:
rules:
...

我已经检查了其他资源,例如CORS问题;内容类型":"多部分/形式数据";或nginx-kubernetes官方文档https://kubernetes.github.io/ingress-nginx/,我采取了相应的行动:将标题设置为"*"并将文件大小增加到CCD_ 6。尽管错误一直存在。所以我最终找到了这个GitHub线程,解释他们用这种方法解决了这个问题。所以我的nginx配置文件改为:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gateway-ingress
annotations:
kubernetes.io/ingress.class: nginx
#nginx.ingress.kubernetes.io/rewrite-target: "/"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"
nginx.ingress.kubernetes.io/cors-allow-headers: "*"
nginx.ingress.kubernetes.io/cors-allow-origin: "$http_origin"
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "Access-Control-Allow-Origin: *";
spec:
rules:
...

但再一次,没有运气。同样的错误也会出现。我的nginx文件中有什么错误吗?如何在不遇到CORS问题的情况下将文件从前端传递到后端?

最后,它比我预期的更琐碎。nginx文件应该以apiVersion: extensions/v1开头,而不是以apiVersion: networking.k8s.io/v1开头。

完整文件:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
kubernetes.io/tls-acme: 'true'
name: gateway-ingress
spec:
...

最新更新