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