Firefox VIEW SOURCE 显示登录页面

Firefox VIEW SOURCE shows login page

我运行在 Arch Linux 上安装 Firefox 61.0。在查看页面源代码时,我经常(但不总是,估计有 20% 的时间)在浏览要求我登录的网站时看到登录页面的源代码。这种情况发生在我浏览本地主机。每个页面的源代码都是在服务器上生成的,这不是被操纵的DOM的问题。它发生在使用 Django 和 PHP 的时候。示例:

登录页面:

<html>
<title>Login</title>
<body>
Login please: [    ]
</body>
</html>

首页:

<html>
<title>Welcome USER NAME</title>
<body>
Good day, USER
</body>
</html>

登录并进入主页后,我按 CTRL+U,它会显示:

<html>
<title>Login</title>
<body>
You are logged in as USER
</body>
</html>

换句话说,它并没有从缓存中取出前一页;它似乎以某种方式尝试获取我所在页面的源代码,但它被重定向到登录页面。

注意:如果我 运行 在页面上检查元素,那么我 看到正确的源代码。问题仅在于 VIEW SOURCE。这不会发生在 Chrome 或其他浏览器中,只是在 Firefox 中。

知道为什么会这样吗?

澄清一下:这是两个不同的页面。登录页面为 login.php,主页为 index.php。当我在 index.php 上按 CTRL+U 时,Firefox 会向我显示 login.php 的源代码,即使我已经登录了。

登录过程正在更改页面中的 html。通常,在登录场景中,这是通过表单完成的。但一般的想法是让您在登录后访问某些内容。这可能意味着同一页面中的新信息。它与主页(可能)或登录页面相同。后端进程检查登录信息,如果匹配,将发送新的html来替换页面中的html。有不止一种方法可以做到这一点,也有不止一种关于网站作为登录结果提供的内容的想法。例如,我建立了一个带有登录名的网站 - 一旦有人登录 - 他们的订单就会自动填写.他们还可以更改个人资料信息。但是页面没有变化。我还构建了完全替换 html 的页面,新页面允许访问允许注册用户访问的任何内容。

我也看到过这种行为,当应用程序 (server-side) 没有正确处理缓存时会发生这种情况。

可能发生的情况是您的 index.php 将 non-logged-in 用户重定向到 login.php。将其与 index.php 页面上的点击相结合,该页面将自身作为资源包含(例如,在图像或 xmlHttpRequest 中)而不提供凭据,您的应用程序会将浏览器(针对此资源)重定向到 login.php。第二次点击(对于与页面具有相同 URL 的资源,没有正确的凭据和不正确的 headers 的响应)将覆盖浏览器缓存中的第一次,使您的浏览器显示第二个响应(重定向到 login.php),而不是当您查看源代码时的第一个(实际 index.php)。

我希望这很清楚,否则我会尝试添加一个示例。您可以使用 redbot 等外部工具来检查索引页面的可缓存性(检查有无凭据)。此外,如果您使用 developer-console (network-tab),您应该启用 'Persist Logs' 并验证请求的 URL 及其缓存状态。 或者,如果这是您控制的 web-application,请检查在应用程序中发送的任何 Cache-ControlLast-Modified headers。

显然,这一直是 Firefox "view source" 的一个问题。 Here's a bug that was reported 13 years ago 描述 Firefox 通过 refreshing/re-requesting 整个页面加载页面源代码的过程。

可能正在下载页面的未缓存版本,因此调试器和源显示不同的结果。这完全取决于登录数据的处理方式(cookie、会话变量、服务器变量等)

Here's another Steckoverflow question on a related topic。我希望这可以让您了解如何解决您遇到的问题。

我遇到了同样的问题。在当前的 FF68 中,它是开发工具首选项中的一个选项。必须取消选中此选项才能发送缓存的登录 cookie。

截至 2021 年 3 月,FF 86 有一个解决方法:

  1. 打开 Web 开发工具 (F12)
  2. 转到“网络”选项卡
  3. 刷新
  4. Select页面请求的行(通常是第一个)
  5. 鼠标右键 -> 复制 -> 复制响应
  6. 粘贴到您最喜欢的编辑器中

您将看到未修改的源。

您也可以在查看源代码window的地址栏中重新输入url。

一步一步:

  • 右键单击并单击“查看页面源代码”
  • 源 window 出现(在本例中是来自登录页面的不需要的源代码)
  • 在“页面源代码 Window”的地址栏中输入您要查看源代码的页面 url
  • 现在您看到了代码并且没有另一个重定向到登录页面(至少在我的项目中)

对 Ognyan 上面的回答稍作修改,但您不能在评论中添加图片。照他说的去做:

  • 打开开发工具
  • 加载页面
  • 找到页面加载(应该是“网络”选项卡上的第一个请求)
  • 单击,然后在“详细信息”部分中右键单击“响应”部分

现在,不用 copying/pasting 编辑器中的任何东西,而是寻找“原始”切换按钮并将其打开。您将看到原始来源: