无界微前端踩坑记

776 阅读1分钟

1、生产环境遇到的跨域问题?

在生产环境我nginx配置的相关跨域都已经配好,但依然报跨域错误,百思不得其解,经过一步步分析,发现是我的nginx一行代码配置错误,导致nginx跨域不生效 具体代码如下

    location / {
      # if ($request_filename ~* .*\.(?:htm|html)$)
      # {
      #    add_header Cache-Control "no-store"; 
      # }
      
      root /dianyi/app/micro-app;
      index index.html;
      try_files $uri $uri/ /index.html;
    }

经过chatgpt解答如下原因: add_header Cache-Control "no-store"; 是设置响应头 Cache-Control 的值为 "no-store"。这个响应头指示浏览器不要缓存任何与此响应相关的内容,每次请求都必须从服务器重新获取。这个响应头对于保护信息安全非常有用,因为它可以确保敏感信息不被缓存到浏览器中,从而避免了一些安全漏洞。

然而,在跨域请求时,由于浏览器的同源策略,浏览器会先向目标站点发送一个 OPTIONS 请求,以确定是否允许跨域请求。如果目标站点返回的响应中包含了 "no-store" 的 Cache-Control 值,则浏览器不会将响应缓存到本地,并且每次跨域请求都需要重新发送 OPTIONS 请求,从而导致了性能问题。

因此,在进行跨域请求时,建议去掉 "no-store" 的 Cache-Control 响应头,或者改为使用 "public" 或 "private" 等其他缓存选项。例如:

复制代码
if ($request_filename ~* .*.(?:htm|html)$)
{
  add_header Cache-Control "public, max-age=60, must-revalidate";
}

上面的例子中,我们使用了 "public" 和 "max-age" 等选项来指示浏览器缓存响应,并在一段时间后自动失效。这样可以提高性能,并且不会影响跨域请求的处理。

未完待续。。。