我有以下问题.
我在IIS 8上托管WCF应用程序,它只接受带有客户端证书的HTTPS请求.此服务接受POST消息,其大小可能不同(从几个字节到1 GB),并且大多数时间是并行接收的.
在以下情况下,客户端获得413 Request实体的响应太大:
可以通过将uploadReadAheadSize值设置为比system.webServer/serverRuntime配置部分中所有并行调用大小的总和更大的值来解决此问题,但这会导致服务器为每个调用分配预读缓冲区的全部内存量,在许多并发调用的情况下,服务器会耗尽内存.
如果使用不同的客户端证书进行调用或上传一个大文件,则我的配置有效.
我已经读过,在IIS 6中,有一个选项可以SSLAlwaysNegoClientCert在配置中设置以修复类似的错误.我已尝试过设置此值的变通方法,但未使用IIS 8.0成功.我也尝试关闭SSL客户端缓存以禁用SSL会话恢复,但这也没有解决我的问题.
什么可能导致413错误?有没有办法在不使用服务器的整个内存的情况下,使用客户端证书启用多个并行上载到同一服务器.
只是一个猜测:
如果请求客户端重新协商,则必须使用 SSL 预加载来预加载请求实体主体。SSL 预加载将使用 UploadReadAheadSize 配置数据库属性的值,该属性用于 ISAPI 扩展。但是,如果UploadReadAheadSize小于内容长度,则会返回HTTP 413错误,并关闭连接以防止死锁。(发生死锁是因为客户端正在等待完成发送请求实体,而服务器正在等待重新协商完成,但重新协商要求客户端能够发送数据,而服务器不能这样做)。
(来自文章客户端无法重新协商请求并返回 HTTP 413 错误 (IIS 6.0)。)
未设置 SSLAlwaysNegoClientCert 时会发生客户端重新协商,因此请使用 OpenSSL 检查它是否已启用(请参阅此问题)。我没有使用过 IIS 8,但在 IIS 7.5 上,从您链接的问题中启用 SSLAlwaysNegoClientCert 的两种方法都对我有用。
| 归档时间: |
|
| 查看次数: |
2083 次 |
| 最近记录: |