跳转至

跨域

什么是跨域?

跨域是指在浏览器中,不同域名下的资源之间的请求会遇到跨域限制。

配置跨域示例

在 Kubernetes 安装 nginx-ingress 后,可以通过配置 Ingress CR 的 Nginx 配置来处理跨域问题。具体方法如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/enable-cors: "true"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              name: http

重新部署 Ingress CR:

kubectl apply -f example-ingress.yaml

这样,nginx-ingress 就会在每个请求的响应头中添加 Access-Control-Allow-Origin: *,实现跨域。

高级配置

  • 配置跨域接受哪些方法

    通过 nginx.ingress.kubernetes.io/cors-allow-methods 控制跨域接受哪些方法,默认为:GET, PUT, POST, DELETE, PATCH, OPTIONS

  • 配置预检请求的缓存时长

    nginx.ingress.kubernetes.io/cors-max-age 用于配置浏览器在多长时间内,不再向服务器发送预检请求(Preflight Request)。

    预检请求是浏览器在发送跨域请求前,先向服务器发送的一个询问请求,询问服务器是否允许该跨域请求。

    通过配置配置该选项,可以减少对服务器的询问次数,从而提高网页性能。

  • 配置是否允许在跨域期间发送凭证

    nginx.ingress.kubernetes.io/cors-allow-credentials 用于配置是否允许浏览器发送凭证(Credentials)。

    Credentials 包括诸如 Cookie、HTTP Authentication 或 Client-side SSL certificates 等数据。如果允许浏览器发送 Credentials,那么必须在服务器响应头中添加 Access-Control-Allow-Credentials: true

  • 配置服务器允许请求的来源

    nginx.ingress.kubernetes.io/cors-allow-origin 用于配置服务器允许请求的来源(origin)。

    当浏览器发送一个请求时,会发送一个 origin 头,告知服务器请求来源。服务器可以通过检查请求头中的 origin 字段,判断是否允许跨域请求。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-ingress
      annotations:
        nginx.ingress.kubernetes.io/cors-allow-origin: "https://example.com,https://www.example.com"
    ...
    

    以上配置表示,只有来自 https://example.comhttps://www.example.com 的请求会被允许。

评论