gpt4 book ai didi

javascript - CDN 上的服务器端渲染问题

转载 作者:行者123 更新时间:2023-12-03 12:10:50 25 4
gpt4 key购买 nike

我最近推出了一个使用服务器端渲染(使用 next.js)的网站。该站点具有登录功能,如果用户请求中存在身份验证cookie,则它将在服务器上为该用户呈现登录 View ,并将呈现的登录 View 返回给用户浏览器。如果用户不存在身份验证 cookie,则它会在服务器上呈现注销的 View 并将其返回给用户浏览器。
目前它工作得很好,但我在尝试通过 CDN 为网站提供服务时遇到了障碍。我的问题是 CDN 将缓存服务器响应以加快速度,因此第一个在 CDN 上访问网站的用户将缓存他们的登录 View 并返回到浏览器。这反过来意味着,因为它已被缓存,因此访问该站点的其他用户也会看到其他用户登录的 View ,而不是他们自己的 View ,因为这是 CDN 缓存的内容。不理想。
我正在努力思考解决这个问题的最佳方法是什么。想听听有关解决此问题的最佳实践方法的任何建议吗?
我想到的一种方法是在第一次访问页面时可能总是返回一个注销的 View 请求,因此客户端的身份验证/登录从那时起总是在服务器上进行身份验证。但是,此方法仅适用于 next.js 仅在第一个请求上进行服务器端渲染并且让后续请求在客户端上进行所有渲染的情况下,我不确定是否是这种情况。
谢谢,我会喜欢我能得到的所有帮助/建议!
更新
从到目前为止我从答案中收集到的信息来看,解决这个问题的最佳方法似乎是在每个用户第一次访问该站点时为他们提供一个 CDN 缓存的注销 View 。如果他们的 cookie 中存在身份验证 token ,我可以从前端手动登录他们。他们登陆的第一页之后的所有页面都必须返回登录 View - Next.js 可以做到这一点吗?这是解决问题的好方法吗?以下是这些步骤的摘要:

  • 用户登陆任意网页
  • 向服务器发出对该页面的请求以及用户 cookie。
  • 因为这是他们访问的第一个页面,cookie 被忽略,并且“注销” View 返回到用户浏览器(将被缓存在 CDN 中)
  • 然后前端加载一个注销的 View 。加载后,它会检查身份验证 token ,如果存在则调用 API 以将其登录
  • 之后的任何其他页面导航都会作为“登录” View 从服务器返回(即这次不会忽略身份验证 cookie)。这避免了必须再次执行第 4 步,这对于每个页面上的用户来说都是烦人的。
  • 最佳答案

    对于表现良好的缓存代理(您的 CDN 应该是),您应该使用两个响应 header :
    缓存控制:私有(private)
    设置此响应 header 意味着不允许中间代理缓存响应。 (如果合适的话,浏览器仍然可以缓存它。如果你想阻止任何缓存,你可以使用 no-store 代替。)
    另见:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
    变化: cookies
    这个响应头表明响应中的数据依赖于 Cookie请求 header 。也就是说,如果我的请求有标题 Cookie: asdf并且您的请求具有标题 Cookie: zxcv ,那么请求被认为是不同的,并且将被独立缓存。请注意,如果 cookie 用于您域中的任何内容,则使用此响应 header 可能会极大地影响您的缓存……我敢打赌它们确实如此。
    另见:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary
    替代...
    如今,一种常见的替代方法是处理所有面向用户的动态数据客户端。这样,您就可以向一些根本没有缓存 CDN 的 API 服务器发出请求。然后页面在客户端填充所需的数据。站点的静态部分直接从 CDN 提供。

    关于javascript - CDN 上的服务器端渲染问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65799660/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com