【问题标题】:IISExpress 10 will not return reasonphrase over HTTPSIISExpress 10 不会通过 HTTPS 返回原因短语
【发布时间】:2016-02-22 05:05:31
【问题描述】:

将 HTTPS 与 IISExpress 10 和 VS2015 Web api 控制器一起使用时,将不会发回 HttpResponseMessage 的 ReasonPhrase。如果我通过 HTTP 连接它可以正常工作,但 HTTPS 只是清除了原因。当部署到 azure 时,这不会发生(https 按预期工作),它只发生在我的本地机器上。

您可以通过创建一个支持 web api 的新 mvc 应用程序来重现这一点,框架 4.5.2。创建一个新的 web api 控制器(它将对 mvc 控制器和 HttpStatusCodeResult 执行相同的操作)并添加一个 post 命令,例如:

public HttpResponseMessage Post()
{
    var ret = new HttpResponseMessage((HttpStatusCode)270) { ReasonPhrase = "Test reason phrase", Content = new StringContent("test content") };
    return ret;
}

我用邮递员来测试它。通过 http 状态将是

270 测试原因短语

通过 HTTPS 就可以了

270 正常

您可以设置断点并查看 ret 设置是否正确,无论请求来自何处,因此 IIS 中的某些内容会覆盖 HTTPS 上的 ReasonPhrase。

我尝试将 web.config 中的 httpErrors 设置为 errorMode 和 existingResponse 的几乎所有组合。我的 machine.config(适用于任何版本的 .net)未在任何地方设置为零售。 .vs 中的 application.config 将 httpErrors 设置为 overrideModeDefault="Allow"。

我想不出也找不到任何其他关于修改设置的建议。这只是 iisexpress 的错误/限制吗?还是我缺少一些神奇的设置?

更新:

我用 windows 10 和 VS2015 制作了一个虚拟机来测试。结果相同。我还在 VM 上启用了 IIS(普通 IIS)并发布到它。结果也一样。

我还将状态代码更改为 570 只是为了好玩,它给出了相同的结果,“570 OK”我觉得很有趣,因为 5xx 不被视为成功代码,所以我预计会有一些不同于 OK 的结果。

【问题讨论】:

  • 您好 jneta,我在 Windows 2016 中遇到了同样的问题(HTTP 将显示正确的 ReasonPhrase,HTTPS 将显示 OK)。它将在 Windows 2012 R2 中运行。我们的 WebAPI 可能会生成 4xx 错误代码,我们希望查询 ReasonPhrase 以向用户显示更好的消息。一年多以前,我还关注了您的 IIS 论坛 link。有人有我们可以尝试的建议吗?提前谢谢你。
  • 由于这似乎是由 IIS 10 默认使用的 HTTP/2 引起的,您可以尝试禁用它。 stackoverflow.com/questions/44660634/… 请注意,我还没有尝试过。我最终不再使用 ReasonPhrase,只是用我的数据传回消息。

标签: asp.net asp.net-web-api iis-express


【解决方案1】:

我遇到了同样的问题,这似乎是由于 IIS 10.0 使用 HTTP/2 以及您的浏览器,它不允许使用 ReasonPhrase 字段。

https://www.rfc-editor.org/rfc/rfc7540#section-8.1.2.4

8.1.2.4。响应伪标头字段

对于 HTTP/2 响应,单个 ":status" 伪标头字段是 定义了携带 HTTP 状态码字段(参见 [RFC7231], 第 6 节)。这个伪头域必须包含在所有 回应;否则,响应格式错误(第 8.1.2.6 节)。

HTTP/2 没有定义携带版本或原因短语的方式 包含在 HTTP/1.1 状态行中。

【讨论】:

  • 谢谢!这让我发疯了,MS 似乎没有人愿意以一种更有效的方式做出回应。
  • 非常感谢。这很有帮助。
猜你喜欢
  • 2019-11-22
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多