开发微信小程序碰到的 IIS 问题
* 未显示页面 因为请求实体过大
问题描述:在 IIS 上部署了一个可以接收文件上传的 POST webAPI ,使用 Http 验证时没有任何问题,使用 SSL 后;通过微信小程序 Post 文件流,就会导致异常:“未显示页面 因为请求实体过大” 的 413 错误;但在 Chrome 内核的微信小程序编辑工具中,则不存在该问题;
问题原因:客户端发起一个请求后,IIS 会收到足以解析请求标头的数据,但不会收到整个请求实体正文,如果发现需要客户端证书时,将尝试重新协商连接; 但此时客户端正等待向 IIS 发送请求中的其余数 据。因此,如果要让客户端能接受重新协商,则必须使用 SSL 预加载功能预加载请求实体正文,此时则可能引起默认设置值 UploadReadAheadSize 长度太小的问题;
解决方案:进入 cd %WinDir%\System32\Inetsrv 目录执行命令行
appcmd.exe list config -section:system.webServer/serverRuntime // 查看当前设置的 UploadReadAheadSize 大小(byte)
appcmd.exe set config -section:system.webserver/serverruntime/uploadreadaheadsize: 204800/commit:apphost // 根据需要调整大小;
* TLS 仅支持 1.2 及以上版本
问题描述:开发微信小程序进行 Post 文件时,遇到了 “tls 仅支持 1.2 及以上版本” 的问题;
问题原因:Windows 服务器默认没有启用支持 TLS 1.2 及以上版本;
解决方案:在PowerShell 中执行以下命令,并重启服务器(必须步骤);
# Enables TLS 1.2 on windows Server 2008 R2 and Windows 7 # These keys do not exist so they need to be created prior to setting values. md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" # Enable TLS 1.2 for client and server SCHANNEL communications new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "Enabled" -value 1 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord" # Disable SSL 2.0/3.0 (PCI Compliance) md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\" md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" -name Enabled -value 0 -PropertyType "DWord" new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server" -name Enabled -value 0 -PropertyType "DWord"