我正在我的台式机上开发一个 Web 应用程序,它在端口 80 上运行。我可以通过输入台式机的 LAN IP 地址 192.168.1.8 从连接到 LAN 的笔记本电脑访问该应用程序。现在,我的应用程序在登录后发送重定向,但我的笔记本电脑假定最终地址是 localhost/login。如果我手动输入任何页面的 IP 地址和 URI,它会显示我已登录,因此它可以按预期工作。那么,为什么重定向会假定 localhost?
我的两台机器都是基于 Linux 的。笔记本电脑是 Chrome OS。我正在运行 nginx,它将非静态文件请求代理到端口 8080 上的 jetty。
$ cat /etc/hosts
127.0.0.1 locahost
192.168.1.8 desktop
$ hostname
desktop
重定向由 Jetty 发送,带有HttpServletResponse.sendRedirect()
总结:
Laptop: Request http://192.168.1.8/login
Desktop: Respond with redirect to /index
Laptop: Redirect request to http://localhost/index
Requesting http://desktop/login doesn't work.
答案1
没有...任何地方可以隐式重定向到localhost
。框架或应用程序内的某些内容正在明确执行此操作。
答案2
连接到任何本地接口地址时,连接都是从 127.0.0.1(本地环回地址)进行的。这不需要重定向。此地址的名称是 localhost,您可以在 /etc/hosts 中找到它。许多应用程序会检查其他本地接口的名称,并优先使用该名称而不是 localhost。
答案3
我猜 Jetty 会在每个相对 URL 前面加上它的根域(在 Apache 中,它被称为“服务器名称”,不知道 Jetty 怎么样):因此是“localhost”。因此,您需要将“localhost”替换为对两台计算机都有意义的名称:
您可以在 Jetty 中将“example.com”之类的域名作为您的 webroot,并将其定义为您的 webroot,然后将其添加到笔记本电脑的 hosts 文件中。