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

标签 jquery internet-explorer-11 fiddler getscript

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

这是加载程序代码的一个片段,它的值(value)。

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.

指向同一个面向公众的服务器,即使 err.status 报告 200 OK,$.getScript() 也会抛出错误。检查数据发现被截断,错误可能是截断导致的JS解析失败。

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

具有类似症状的问题:

<小时/>

我确认家庭和工作中的 IE 均为 11.0.9600.17690 更新 KB3032359。

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

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

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

诊断摘要

  • 不是网络问题,而是通过我的手机使用替代路由失败
  • 不是IE版本,同样的IE在家搭建不会失败
  • 它不是平台(都在 Win81 上),尽管它可能是网络硬件驱动程序
  • 它不是 IIS,适用于家里、我的 WinPhone81 以及所有其他浏览器
  • 是 IIS,关闭服务器压缩即可修复
  • 这不是 IIS,压缩对于其他浏览器来说效果很好,尽管我不认为使用支持压缩的浏览器来捕获流量
  • 在压缩处于事件状态时插入 Fiddler 解决了问题
  • 这不是浏览器缓存问题,getScript 提供了一个缓存破坏器参数,当我故意允许缓存时,它在捕获文件中很明显是 http 无更改响应。

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

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

最佳答案

通过在 IIS 中禁用压缩可以解决该问题。

关于jquery - 来自 IIS 的压缩 XHR 响应不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29505327/

相关文章:

javascript - Three.js THREE.DoubleSide 在 IE 11 中不起作用

android - 配置 Fiddler 以监控来自 Android Emulator 的 HTTPS 请求

fiddler - 如何设置 Fiddler 一次发出多个请求?

http - 向测试人员介绍 HTTP 和 Fiddler?

javascript - 以内圆和外圆为界的三 Angular 形

jquery - angular 2 wepack元素添加jquery(Bootstrap的JavaScript需要jQuery)

excel - 无法通过 excel vba 自动填充网站的标签

html - IE11 上的 Flexbox : image stretched for no reason?

jquery - 高级 JQuery 验证 : Avoiding Validations on Certain Conditions

jQuery - 如何为 box-shadow 属性设置动画?