IIS 返回 400 - 缺少内容错误

IIS returning 400 - Missing Content error

我是 运行 Windows Server 2012 R2 上的 IIS 8.5 版。该站点是一个 API 处理通过 HTTPS (TLS 1.2) 请求的站点。其中一个端点通过 PUT (command/verb) 接受 JSON 序列化数据。数据可以成功传输到一定大小(大约 8MB)。对于大于该值的数据集,客户端会收到一个奇怪的 HTTP 错误:400 - Missing Content。我在 IIS 服务器上为 400 错误启用了跟踪规则,可以看到在跟踪中的哪个点发回了 400 - Missing Content 响应。但是,我无法破译在此之前的事件中可能出了什么问题。我只能注意到数据正在以 16299 bytes 块的形式读取多轮。然后突然读取的字节数减少了 (12506 bytes),我们得到了这个事件序列:

1288.   NOTIFY_MODULE_COMPLETION    ModuleName="ManagedPipelineHandler", Notification="EXECUTE_REQUEST_HANDLER", fIsPostNotificationEvent="false", CompletionBytes="12506", ErrorCode="The operation completed successfully.
 (0x0)" 07:20:18.730
1289.   AspNetPipelineEnter Data1="System.Web.ImplicitAsyncPreloadModule"   07:20:18.730
1290.   AspNetPipelineLeave Data1="System.Web.ImplicitAsyncPreloadModule"   07:20:18.730
1291.   AspNetHttpHandlerEnter      07:20:18.730
1292.   GENERAL_SET_RESPONSE_HEADER HeaderName="Content-Length", HeaderValue="30", Replace="false"  07:20:19.043
1293.   GENERAL_SET_RESPONSE_HEADER HeaderName="Cache-Control", HeaderValue="private", Replace="true"   07:20:19.043
1294.   GENERAL_SET_RESPONSE_HEADER HeaderName="X-AspNet-Version", HeaderValue="4.0.30319", Replace="true"  07:20:19.043
1295.   MODULE_SET_RESPONSE_ERROR_STATUS
Warning ModuleName="ManagedPipelineHandler", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="400", HttpReason="missing content", HttpSubStatus="0", ErrorCode="The operation completed successfully.
 (0x0)", ConfigExceptionInfo=""

我还启用了 IIS 对客户端的详细错误响应,但是返回的消息不包含任何有用的信息(只是启用了我已经完成的跟踪)。以下是返回内容的片段,以防有人疑惑:

<div class="content-container"> 
  <h3>HTTP Error 400.0 - missing content</h3> 
  <h4>Bad Request</h4> 
</div> 
<div class="content-container"> 
 <fieldset><h4>Most likely causes:</h4> 
  <ul>  <li></li> </ul> 
 </fieldset> 
</div> 
<div class="content-container"> 
 <fieldset><h4>Things you can try:</h4> 
  <ul>  <li>Create a tracing rule to track failed requests for this HTTP status code. For more information about creating a tracing rule for failed requests, click <a href="http://go.microsoft.com/fwlink/?LinkID=66439">here</a>. </li> </ul> 
 </fieldset> 
</div>

有人知道这是什么原因吗?或者,我可以采取什么样的调试方法来更深入地了解问题?

重新检查部署的IIS的配置后,很明显问题是由于请求可以设置的最大数据限制。因此,IIS 配置的 HttpRuntimeSectionMaxRequestLength 中存在错误(值太低)。

您可以在此处 属性 阅读更多相关信息:https://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.maxrequestlength(v=vs.110).aspx。本质上,数量(以千字节为单位测量)决定了请求的最大大小。在上面的案例中,当数据的大小超过该字段设置的限制时,问题就出现了。