错误的请求-无效的主机名HTTP错误400。请求的主机名无效

时间:2018-12-09 05:30:47

标签: ssl curl iis-10

我收到此错误:

Bad Request - Invalid Hostname HTTP Error 400. The request hostname is invalid

在使用https的全新网站上。

我的绑定看起来像这样:

enter image description here

我也尝试使用test.example.com*作为我的主机名。

我正在使用从GoDaddy获得的证书,并使用其中一种在线验证服务进行了验证(安装后)。

我一直在追逐这个错误好几个小时,然后快要疯了。其他人正在报告此错误,但他们在http或IIS7上报告了此错误。我使用的是IIS10,因此IIS7解决方案不适用。

我在Amazon EC2上。

我怀疑存在以下问题,但我不知道如何解决:

我必须以某种方式告诉机器(EC2AMAZ-XYZ)与我的证书(test.example.com)具有相同的名称。

此命令可以正常运行:

curl https://test.example.com:8028

但是此命令将因上述错误而失败:

curl -d '{"UserName":"JOHN", "Password":"CHANGEME"}' -H "Content-Type: application/json" -X POST https://test.example.com:8028/api/Account/login

如果我在浏览器中使用https://test.example.com:8028可以正常工作,但是我无法在浏览器中运行POST命令。

我们添加了一个基于GET的Login版本,但由于相同的错误而失败。我们还启用了http,但也失败了。

以下是与此问题相关的代码:

using System.Web.Http;
using Newtonsoft.Json.Serialization;

namespace TappDmz
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();
            // Route to index.html
            config.Routes.MapHttpRoute(
                name: "Index",
                routeTemplate: "{id}.html",
                defaults: new { id = "index" });

            config.Routes.MapHttpRoute(
             name: "DefaultApi",
             routeTemplate: "api/{controller}/{id}",
             defaults: new { id = RouteParameter.Optional });
            //Now set the serializer setting for JsonFormatter to Indented to get Json Formatted data  
            config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
            //For converting data in Camel Case  
            config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

命令行curl很难确定您要连接的主机。试试这个

curl -H 'Host: test.example.com' -d '{"UserName":"JOHN", "Password":"CHANGEME"}' -H "Content-Type: application/json" -X POST https://test.example.com:8028/api/Account/login

请参见here