1

在开发我的 web 应用程序(需要登录整个站点)时,我注意到一个有趣的“故障”(如果你可以这样称呼它)。我正在查看我的 Django 站点,并在 Chrome 中登录到该站点(在测试服务器上)。然后我退出了我的网站并完全关闭了 Chrome。

然后我打开 Firefox 并粘贴到我的 Django 站点的 URL,期望被带到登录页面。但是,我没有被要求登录,而是已经登录。所以我继续退出该站点并关闭 Firefox。

然后我重新打开 Chrome 登录,却发现没有 CSS 样式。我登录后,整个站点都失去了 CSS 样式,并且测试服务器保留了304所有 CSS 和 IMG 文件的错误。

我发现该304错误与时间不匹配有关(例如 Django 认为我已注销,但在 Firefox 中我已登录 - 所以现在它很困惑)。

我只是想知道这是否可以避免,或者它是否是测试服务器的“功能”?这种事情在生产模式下也会发生吗?


编辑以明确我的要求:

当我使用 Apache 启动 webapp 时,由于 Django 测试服务器遇到的 304 错误而导致的样式和图像丢失是否会继续发生?

谢谢!

4

1 回答 1

0

你有关于三件事的问题:

  1. 为什么您在 Firefox 中登录。
  2. 为什么你在 Chrome 中丢失了 CSS 样式。
  3. 所有这些 304 响应是什么。

不幸的是,对于您看到的前两个问题,有很多可能的解释。很可能没有什么太严重的问题。

对于前两个问题,您可以尝试恢复到新状态,然后查看问题是否仍然存在。例如,使用干净的 Django 数据库(没有会话)并尝试清除所有缓存的浏览器信息(cookies、auth、缓存文件)。诚然,这是一种非常耗时的测试问题的方法,但这是我能给出的最好的一般建议,而无需直接检查您的情况。

幸运的是,304 响应根本不是问题。304 仅表示浏览器在其缓存中有文件。请参阅条件视图处理

当客户端下一次请求相同的资源时,它可能会发送一个标头,例如 If-modified-since,包含它发送的最后修改时间的日期,或 If-none-match,包含它发送的 ETag。如果页面的当前版本与客户端发送的 ETag 匹配,或者如果资源没有被修改,则可以发回 304 状态码,而不是完整的响应,告诉客户端没有任何变化。

于 2011-10-11T09:17:53.717 回答