火狐浏览器查看源代码显示的是登录页面。

15

我在 Arch Linux 上运行 Firefox 61.0。当查看页面源代码时,我经常(但并不总是,大约20%的时间)在浏览需要登录的网站时看到登录页面的源代码。这发生在我浏览 localhost 时。每个页面的源代码都是在服务器上生成的,这不是 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>

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

注意:如果我在页面上运行“检查元素”(INSPECT ELEMENT),那么我确实可以看到正确的源代码。问题只出现在“查看源代码”(VIEW SOURCE)时。这在Chrome或其他浏览器中都不会发生,只有在Firefox中会出现。

有什么想法是为什么会发生这种情况吗?

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


看一下Firefox正常情况下向页面发送的HTTP头和查看源代码时发送的HTTP头。可能Firefox在查看源代码时没有发送cookie头或类似的头,这可能会改变相同端点的输出...只是猜测。 - roryrjb
7个回答

3
显然,这一直是Firefox的“查看源代码”存在的问题。13年前有一个报告了这个问题的bug,描述了Firefox通过刷新/重新请求整个页面来加载页面源代码的过程。
可能正在下载未缓存的页面版本,因此对于调试器和源代码显示不同的结果。这取决于登录数据的处理方式(cookie、会话变量、服务器变量等)。
这里还有另一个与此相关的Steckoverflow问题。希望这能给您解决您所遇到的问题提供一些思路。

2
啊,原来如此!谢谢,这个13年的bug真让人烦恼,但知道这是FF的问题还是很好的。我已经因为这个问题疯狂了一段时间了。现在当我需要解决这个问题时,我会使用Chrome。 - user585936
跟随链接,但没有找到任何真正的解决方案。 - Brobic Vripiat

2
截至2021年3月,FF 86有一个解决方法:
  1. 打开Web开发工具(F12
  2. 进入网络选项卡
  3. 刷新
  4. 选择页面请求的行(通常是第一行)
  5. 右键单击 -> 复制 -> 复制响应
  6. 粘贴到您喜欢的编辑器中
你将看到未修改的源代码。

2
对Ognyan上面的回答进行了轻微修改,但是您不能在评论中添加图片。按照他的建议操作如下:
  • 打开开发者工具
  • 加载页面
  • 找到页面加载(应该是网络选项卡上的第一个请求)
  • 单击,然后在右侧的详细信息部分单击响应部分

现在,不要将任何内容复制/粘贴到编辑器中,查找“raw”切换按钮并打开它。您将看到原始源代码:

enter image description here


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

enter image description here

enter image description here


这可能会影响开发者工具窗格,但不会影响查看源代码 - Melebius

0

我也见过这种情况,通常是由于应用程序(服务器端)没有正确处理缓存而导致的。

可能会发生的情况是,你的 index.php 会将未登录的用户重定向到 login.php。如果在不提供凭据的情况下,访问包含自身作为资源的 index.php 页面(例如在图像或 xmlHttpRequest 中),你的应用程序会将浏览器(对于此资源)重定向到 login.php。这第二次请求(使用与页面相同 URL 的资源,没有正确的凭据和具有错误标头的响应)将覆盖浏览器缓存中的第一次请求,使得当你查看源代码时,浏览器显示第二个响应(重定向到 login.php),而不是第一个响应(实际的 index.php)。

我希望这很清楚,否则我会尝试添加一个示例。您可以使用外部工具,例如redbot来检查索引页面的可缓存性(使用凭据和不使用凭据都要检查)。此外,如果您使用开发人员控制台(网络选项卡),您应该启用“持久日志”并验证所请求的URL及其缓存状态。 或者,如果这是您控制的Web应用程序,请检查应用程序中是否发送了任何Cache-ControlLast-Modified头。


0
登录过程会更改页面中的HTML。在登录场景中,通常会使用表单来完成此过程。但是总体思路是在你登录后让你访问某些内容。这可能意味着在同一页面中添加新的信息。这可能是主页(也可能不是)或登录页面。后端流程会验证登录信息,如果匹配,则会发送新的HTML以替换页面中的HTML。有多种方法和想法可以实现网站提供登录结果。例如,我构建了一个带有登录功能的网站,一旦有人登录,他们的订单表格会自动填充。他们还可以更改个人资料,但页面不会更改。我还构建了可以完全替换HTML的页面,以便已注册用户可以访问他们被允许访问的内容。

谢谢,但页面确实完全改变了;这两个文件是非常不同的文件(我正在浏览本地主机,而不是互联网)。我已经添加了这个澄清。 - user585936
显示源代码可以显示原始源代码。使用检查可以显示当前页面。现在阅读您的问题;您的网络是否收到304返回代码? - Roger F. Gay
网页也可以在服务器上进行修改。PHP自然而然地完成了这一任务,它应该能够交付生成响应表单的内容——例如典型的登录表单。可能是PHP动态生成了登录表单和响应。不过,从你上面解释的情况来看,似乎有些不对劲。如果我们能看到整个应用程序,包括PHP代码,那将会很有帮助。 - Roger F. Gay

0

你也可以在查看源代码窗口的地址栏中重新输入 URL。

步骤:

  • 右键单击并点击“查看页面源代码”
  • 出现源代码窗口(在本例中为登录页面的不必要源代码)
  • 在“页面源代码窗口”的地址栏中输入您想要查看源代码的页面的 URL
  • 现在您可以看到代码,且没有其他重定向到登录页面(至少在我的项目中是这样的)

你能提供更多细节吗?就目前而言,这并不起作用,否则我可能误解了你所说的应该做什么。 - freefaller
当然,@freefaller ..
  • 右键单击并单击“查看页面源代码”
  • 源窗口出现(在这种情况下,是来自登录页面的不需要的源代码)
  • 在“页面源代码窗口”的地址栏中输入您想要查看源代码的页面的URL
  • 现在没有另一个重定向到登录页面(至少在我的项目中)
- medicalbird
抱歉,这仍然没有帮助。如果我在地址栏中重新输入URL,我会得到页面,而不是源代码...即使我使用“view-source:”前缀也是如此。此外,对于由表单数据驱动的页面也没有帮助。 - freefaller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接