我是一名Web开发人员,经常在Apache和IIS托管项目之间切换。多年来,我注意到这两种环境之间存在一个明显的区别。
在Apache中,如果我知道要花费一段时间才能加载页面,则可以对输出进行优先级排序,以便首先显示屏幕的某些部分。相反,IIS会等到整个页面加载完成,然后再显示其中的任何部分。
示例:
momentjs
在Apache中,上面的代码将显示“ Hello”,然后在5秒后附加“ world”。对此。在IIS中-至少使用其默认设置-浏览器将等待5秒钟,然后显示“ Hello world”。全部一次。
有人知道为什么会这样吗?更重要的是,赋予管理员对服务器的完全访问权限,是否有办法强制IIS在加载时提供增量内容??
到目前为止已尝试的事情:
答案 0 :(得分:0)
FastCGI-在IIS中运行PHP的最常见方式-默认情况下配置为在将一定数量的数据刷新到浏览器之前先缓冲一定数量的数据;因此我们需要禁用此缓冲区,或将responseBufferLimit
设置为0。
这是在名为applicationHost.config
的文件中配置的。您可以在服务器的硬盘驱动器中搜索此文件,或签入C:\Windows\System32\inetsrv\config\applicationHost.config
在文本编辑器中打开此文件,然后搜索以<handlers
开头的部分。在本节中,您的FastCGI实例应有一个条目。我们需要修改该条目以将responseBufferLimit="0"
添加为参数。
之前:
<add name="PHP_via_FastCGI" path="*.php" verb="GET,HEAD,POST", modules="FastCgiModule", scriptProcessor="C:\Program Files\PHP\v7.2\php-cgi.exe" resourceType="Either" />
之后:
<add name="PHP_via_FastCGI" path="*.php" verb="GET,HEAD,POST", modules="FastCgiModule", scriptProcessor="C:\Program Files\PHP\v7.2\php-cgi.exe" resourceType="Either" responseBufferLimit="0" />
或者,您可以使用命令行:
C:\Windows\SysWOW64\inetsrv>appcmd.exe set config /section:handlers "/[name='PHP_via_FastCGI'].ResponseBufferLimit:0"
然后,重新启动IIS。现在,应在生成输出时将其流式传输到浏览器。