我在Windows Server 2012 R2上运行IIS 8.5版。该站点是通过HTTPS处理请求的API(TLS 1.2)。其中一个端点通过PUT(命令/动词)接受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>
有谁知道这可能是什么原因?或者,我可以采用什么样的调试方法来获得对问题的更多见解?
答案 0 :(得分:0)
重新检查已部署的IIS的配置后,很明显问题是由于请求可以设置的最大数据限制。因此,IIS配置的MaxRequestLength
的{{1}}中存在错误(值太低)。
您可以在此处详细了解此媒体资源:https://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.maxrequestlength(v=vs.110).aspx。实质上,金额(以千字节为单位的度量)决定了请求的最大大小。在上述情况下,当数据大小超过该字段设置的限制时,就会出现问题。