首先检查IIS有没有安装动态压缩功能,如果没有则安装之。
然后配置IIS,操作步骤如下:
- 在Internet 信息服务(IIS)管理器中左侧目录中选择顶部节点,在右侧的功能视图中双击配置编辑器。
- 在配置编辑器界面,选择 system.webServer/httpCompression 节,在下方列表中点击 dynamicTypes 属性右侧的 ... 按钮。
- 在集合编辑器界面,点击添加按钮。在左侧下方的编辑界面,enabled 属性设置为 True,mimeType 属性设置为 application/msbin1(这是我们项目中用到的)。
设置完成后,动态压缩即可启用。
如果不成功,可以按如下步骤排查:
- 看看请求中有没有Accept-Encoding:gzip, deflate。(建议用Fiddler进行跟踪,不要用IE的开发人员工具,因为我发现IE的开发人员工具对Gzip压过后的文件进行了解压,并且将Headers中Content-Encoding: gzip去掉了)。
- 配置编辑器中system.webServer/httpCompression节,下方dicretory的目录IIS用户组有没有访问权限。
- 会不会由于CPU使用率过高引起的,这里要说明下dynamicCompressionEnableCpuUsage是指CPU达到上限后,恢复到百分之多少以下才再次启动压缩。
- 请求的资源类型有没有加入到dynamicTypes中。
- 会不会是测试的方法返回数据太小,可以适当调低minFileForComp。
- 直接到服务器上测试,这样可以不经过过路由,如果发现还不行,则需要将 跟踪 安装上,然后在IIS顶层编辑 失败请求跟踪规则 ,一般是添加→所有规则→状态代码(200)。然后到相关网站节点,启动 失败请求跟踪规则,运行测试,然后可以看到C:\inetpub\logs\FailedReqLogFiles\W3SVC1下生成一批跟踪文件。
- 双击跟踪文件,找到相关的请求,直接看Compact view ,找到GENERAL_REQUEST_HEADERS,看看有没有收到Accept-Encoding:gzip, deflate,如果没有,则说明被防火墙过滤掉了,这需要找网管了。
- 如果有,则往下找到DYNAMIC_COMPRESSION_NOT_SUCCESS,里面会有没有进行压缩的原因。