我正在开发两个 Web 应用程序:
- App1是用 ASP.NET 编写的应用程序,可直接在 Windows 10 上运行。可以通过浏览器访问此应用程序,网址为 https://localhost:44311/
- App2是用 Django 编写的,并在同一台 Windows 计算机上通过 WSL2 在 Ubuntu-20.04 中运行。可以通过浏览器访问该应用程序,地址为 http://localhost:8000/
我正在尝试从 App2 的后端向 App1 的后端进行 https 调用。禁用 Windows 10 防火墙并阅读另一个问题,在我看来,该部分正确,但 App1 返回错误。我尝试在 Ubuntu WSL shell 上执行以下指令:
curl -k https://DESKTOP-2MCFHIT.local:44311
但我收到以下错误:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>
由于未使用“localhost”,IIS Express 似乎无法正确处理请求。我该如何解决?
由于我不使用 IIS Express,因此在这里进行有根据的猜测,但从这个 SO question看来,IIS Express 的默认设置是仅绑定到
localhost
。由于您需要从另一台“计算机”(虚拟化 WSL2 实例)访问它,因此您需要它来侦听所有地址。在大多数软件中,这将通过绑定到 来完成
0.0.0.0:port
,但看起来 IIS 中的正确设置(来自该问题的答案)是:请注意,听起来您还需要以管理员身份运行,如果您还没有这样做的话。