背景:我有一个 Java 网络服务器类 (NanoHTTPD),我的应用程序通过添加会话、页面模板、身份验证和动态内容来扩展它。我想让应用程序自包含,而不依赖于 SQLite 之外的任何东西。它旨在仅在安装 Java 和 SQLite 的情况下运行。
现在解决我的问题。我正在测试一个只有注销链接的简单索引页面。如果用户在没有登录的情况下访问索引,他们会被 HTTP 重定向到登录页面。当他们发布凭据并经过验证时,它将它们返回到索引页面。如果您在 Firefox 中单击注销链接,我的应用程序只会收到指向索引('/')的 URI。按照 Chrome 中的相同过程,它会按预期将用户注销。我不会在任何时候修改 GET URL;我只运行 uri.equals("/logout/")。Firefox 有什么理由会以不同的方式解释这个链接?
登录 HTML:
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<div>
<p></p>
<form method="post" action="/login/">
<table>
<tr>
<td>
<label for="username">Username</label>
<input type="text" name="username" id="username" maxlength="100" />
</td>
<td>
<label for="password">Password</label>
<input type="password" name="password" id="password" />
</td>
<td></td>
<td>
<input type="submit" value="Sign In" />
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
索引 HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Index</title>
</head>
<body>
<h1>Index</h1>
<a href="/logout/">Logout</a>
</body>
</html>
匹配 URL 的代码只是 .equals() 并且在此之前运行的唯一代码是 NanoHTTPD,它位于此处:https ://github.com/elonen/nanohttpd/blob/master/NanoHTTPD.java
还有一件事,我制作了一个页面“test.html”,我从上面复制了源代码。Firefox 也不能正确处理它并停留在页面上而不给出 File Not Found 错误。此外,如果我将页面更改为使用“/logout1/”,一切正常。