从 Ubuntu WSL 调用后,IIS Express 返回 HTTP 错误 400

从 Ubuntu WSL 调用后,IIS Express 返回 HTTP 错误 400

我正在开发两个网络应用程序:

  • 应用1是一个用 ASP.NET 编写的应用程序,可直接在 Windows 10 上运行。可以通过浏览器访问 https://localhost:44311/
  • 应用2用 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>

看来 IIS Express 无法正确处理请求,因为没有使用“localhost”。我该如何解决?

答案1

由于我没有使用 IIS Express,因此我在这里进行了有根据的猜测,但看起来这个问题IIS Express 默认localhost仅绑定到。

由于您需要从另一台“计算机”(虚拟化的 WSL2 实例)访问它,因此您需要它监听所有地址。在大多数软件中,这可以通过绑定到来完成0.0.0.0:port,但它看起来像是 IIS 中的正确设置(来自这个答案回答这个问题)是:

bindingInformation=":44311:"

请注意,如果您还没有这样做,听起来您也需要以管理员身份运行。

相关内容