我在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>
换句话说,它不是从缓存中获取前一页;似乎以某种方式尝试获取我所在页面的源代码,但它被重定向到登录页面。
注意:如果我在页面上运行INSPECT ELEMENT,那么我做会看到正确的源代码。问题仅在于VIEW SOURCE。在Chrome或其他浏览器中,仅在Firefox中,不会发生这种情况。
有人知道为什么会发生这种情况吗?
要澄清:这是两个不同的页面。登录页面是login.php,主页是index.php。当我在index.php上按CTRL + U时,即使我已经登录,Firefox也会向我显示login.php的源代码。
答案 0 :(得分:2)
显然,这一直是Firefox的“查看源代码”的问题。 Here's a bug that was reported 13 years ago描述了Firefox通过刷新/重新请求整个页面来加载页面源代码的过程。
有可能正在下载页面的未缓存版本,因此对于调试器和源显示不同的结果。这完全取决于如何处理登录数据(cookie,会话变量,服务器变量等)
Here's another Steckoverflow question on a related topic。我希望这能给您一个解决问题的思路。
答案 1 :(得分:2)
我有同样的问题。在当前的FF68中,它是开发工具中preferences中的一个选项。必须是unchecked才能发送缓存的登录cookie。
答案 2 :(得分:2)
截至 2021 年 3 月,FF 86 有一个解决方法:
您将看到未修改的源代码。
答案 3 :(得分:0)
登录过程正在更改页面中的html。通常,在登录方案中,这是通过表单完成的。但是一般的想法是登录后就可以访问某些内容。这可能意味着在同一页面中有新信息。与首页(或登录页面)相同。后端进程检查登录信息,如果匹配,将发送新的html替换页面中的html。关于登录后网站提供的内容,有多种方法可以实现。例如,我建立了一个具有登录名的网站-一旦有人登录,他们的订单将自动填写。他们还可以更改其个人资料信息。但是页面没有改变。我还构建了将新页面完全替换为html的页面,该页面允许访问已注册用户被允许访问的任何内容。
答案 4 :(得分:0)
我也看到了这种现象,当应用程序(服务器端)无法正确处理缓存时就会发生这种情况。
可能发生的情况是,您的index.php
将未登录的用户重定向到login.php
。将此内容与index.php
页面上的匹配项相结合,该页面将其自身作为资源(例如,在图像或xmlHttpRequest中)不提供凭据,并且您的应用程序会将浏览器(针对该资源)重定向到login.php
。第二次匹配(对于与页面具有相同URL的资源,没有适当的凭据以及标题不正确的响应)将覆盖浏览器缓存中的第一个响应,使浏览器显示第二个响应(重定向到login.php
),而不是查看源代码时的第一个(实际index.php
)。
我希望这很清楚,否则我将尝试添加一个示例。您可以使用外部工具,例如redbot来检查索引页的可缓存性(同时检查是否使用凭据)。另外,如果您使用开发者控制台(网络选项卡),则应启用“持久日志”并验证请求的URL及其缓存状态。
另外,如果这是您控制的Web应用程序,请检查应用程序中是否正在发送任何Cache-Control
和Last-Modified
标头。
答案 5 :(得分:0)
您也可以在查看源窗口的地址栏中重新输入网址。
循序渐进:
答案 6 :(得分:0)