Safari 在自动填充的 url 栏上发送获取 ajax 请求



我的客户端反应应用程序在 http://localhost:3000 上运行,我的节点JS服务器在 http://localhost:8080 上运行。当客户端 url 被加载时,它会发送 GET/auth/user 304 0.494 ms - - fetch ajax 请求来加载用户(在 react componentDidMount 函数上(。问题是,当在 Safari 浏览器上键入"l"并且 url 自动填充"http://localhost:3000"时,确认我的服务器在我什至按回车键之前和加载客户端页面之前收到与 GET/auth/user 相同的请求。在Chrome中它没有。为什么 Safari 浏览器在用户没有访问页面而只是键入其 url 的一部分时发送 ajax 请求?这是一种设计的行为吗?

由于跟踪原因 6 小时。我发现 Safari 实现缓存的 ajax 请求与其他 Web 浏览器不同。当 Safari 具有客户端 url 数据时,该数据具有向外部 API 请求 ajax 的记录,Safari 会在用户访问客户端 url 页面之前发送相同的 ajax 请求(当 url 被键入并自动建议时(以检查响应是 200(不同(还是 304(相同(。如果响应是 304(相同(并且客户端页面实际加载,则 Safari 不会再次发送 ajax 请求。这在用户登录过程中可能非常烦人,因为用户数据是在实际身份验证过程完成之前加载的(用户数据响应为 304(,因此客户端应用程序在浏览器进行身份验证时保持未经身份验证。我找到的解决方案是在获取用户数据时添加一个额外的查询参数('${root}/auth/user?' + 'nocache= new Date.getTime((' (,以防止在 Safari 浏览器中缓存 AJAX。希望它能帮助面临同样问题的人。

最新更新