您的位置:首页 > 理论基础 > 计算机网络

客户端无法重新协商请求并返回 HTTP 413 错误

2008-01-10 15:17 369 查看
如果 Web 服务器、网站或站点的单个目录或文件上启用了客户端证书,则客户端在上载较大的文件时可能会看到 HTTP 413 错误。

如果客户端向运行 IIS 6.0 的 Web 服务器发送一个较长的 HTTP 请求(如 POST 请求),则 IIS 工作进程可能会收到足以解析请求标头的数据,但不会收到整个请求实体正文。当 IIS 工作进程检测到需要客户端证书以向客户端返回数据时,IIS 尝试重新协商客户端连接。不过,客户端无法重新协商连接,因为它正在等待向 IIS 发送请求中的其余数据。

如果请求客户端重新协商,则必须使用 SSL 预加载功能预加载请求实体正文。SSL 预加载功能将使用用于 ISAPI 扩展的 UploadReadAheadSize 配置数据库属性的值。但是,如果 UploadReadAheadSize 小于内容长度,则返回 HTTP 413 错误,并关闭连接以防止出现死锁。(在以下情况下出现“死锁”:客户端正在等待发送请求实体,而服务器等待完成重新协商,重新协商要求客户端能够发送数据,可是这是无法完成的。)

解决方案是确保没有禁止客户端发送整个实体正文。为此,应将 UploadReadAheadSize 的值更改为大于内容长度的值。

下例显示了如何将 Web 服务器上 UploadReadAheadSize 的值设置为 64 KB。

在命令窗口运行以下命令:
C:/>cscript.exe C:/Inetpub/AdminScripts/adsutil.vbs set w3svc/1/uploadreadaheadsize 65536
w3svc为IIS服务,1为网站的序列号(可以根据网站的日志目录来确定序列号如C:/WINDOWS/system32/Logfiles/W3SVC1/..)。

注意:对于不要求进行客户端证书身份验证的网站,不建议将 UploadReadAheadSize 属性设置为 64KB 以上,否则您将面临允许匿名拒绝服务 (DOS) 攻击的风险。当 UploadReadAheadSize 需要设置为大于 64KB 的值时,建议将 SSLAlwaysNegoClientCert 属性设置为 True,这样将要求客户端安装有效的客户端证书。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐