来自带压缩的 IIS 的不完整 XHR 响应

Incomplete XHR responses from IIS with compression

我正在使用 jQuery ajax 加载脚本。

这是从加载程序代码中截取的片段,物有所值。

var resources = ['knockout-3.2.0.js', 'fonts/fontawesome-webfont.eot', ... ];
var retryCount = 0;
load(0);
function load(i) {
  if (i == resources.length) {
    $("#progBar").width("100%");
    $("#progCaption").text("executing App/main...")
    var requireScript = document.createElement('script');
    requireScript.setAttribute("type", "text/javascript");
    requireScript.setAttribute("src", "Scripts/require.js");
    requireScript.setAttribute("data-main", "App/main");
    head[0].appendChild(requireScript);
  }
  else {
    $("#progBar").width(100 * i / resources.length + "%");
    var r = resources[i];
    switch (r.substring(r.lastIndexOf('.'))) {
      case ".js":
        $("#progCaption").text(r);
        $.getScript('Scripts/' + r)
        .done(function (data) {
          retryCount = 0;
          load(++i);
        })
        .error(function (err) {
          if (err.status == 404 || retryCount == 3) {
            load(++i);
          } else {
            retryCount++;
            console.log('Retry ' + r);
            load(i);
          }
        });
        break;
      ...

Recommended syntax for getScript only takes one parameter. Either it's a valid URL or not. Because the start of the resource is returned we know the URL is valid . There is no error in the invoking code, jQuery is failing to get the entire response before parsing it as a script.

指向同一个 public 面向服务器,即使 err.status 报告 200 OK,$.getScript() 也会抛出错误。检查数据显示是t运行cated,错误可能是由于t运行cation.

导致的JS解析失败

这只发生在 IE11 工作时,当流量通过 Fiddler 路由时问题不再出现。它根本不会出现在家里​​的 IE11 上。将 'knockout-3.2.0.js', 更改为 'knockout-3.2.0.debug.js', 会导致 knockout 加载顺利,但是 bootstrap.js 不会缩小并且会播放,所以它不像没有换行那么简单。我认为这可能是某种由名称更改修复的 server 缓存问题(这不可能是浏览器缓存问题,因为 getScript 应用了缓存破坏参数)但我尝试重命名 knockout -3.2.0.js 到 knockout-3.2.0.min.js 并没有什么区别。

具有相似症状的问题:


我验证了家里和工作中的 IE 都是 11.0.9600.17690 更新 KB3032359。

当我禁用 IIS 压缩时,问题消失了。

不知道是静态压缩还是动态压缩,因为我同时关掉了。

如果 Microsoft 的任何人希望调查(如果答案是否定的,我不会感到惊讶,这有点极端)...我有 PCAP 文件客户端和服务器之间的失败交换。

诊断摘要

我有一种最奇怪的感觉,这是相关的Why does IE11 create blank post request except when Fiddler is running?,但我说不出为什么。

一旦文件在缓存中,它们的大小就不再重要,这就是为什么我 运行 一个预加载器 - 对于像我这样的 SPA,它是有效的安装。 SPA 优于传统应用程序架构的有力论据。但是冗长的设置确实会影响第一次体验。

问题已通过在 IIS 中禁用压缩得到解决。