IE XMLhttpRequest getResponseHeader («Content-Length») отсутствует, когда отправляется Content-Encoded - PullRequest
4 голосов
/ 11 сентября 2010

Почему IE не позволяет мне увидеть заголовок Content-Length с getResponseHeader()?

Я знаю, что там отправляются заголовки; Я могу видеть их с Wireshark. IE просто не позволит мне их получить.

Если заголовок Content-Encoding НЕ отправляется, независимо от того, загружен ли контент или нет, я могу получить их просто отлично.

Пример кода:

    function getXMLHttpRequest() {
        if (window.XMLHttpRequest) {
            return new window.XMLHttpRequest;
        }
        else {
            try {
                return new ActiveXObject("MSXML2.XMLHTTP.3.0");
            }
            catch (ex) {
                return null;
            }
        }
    }
    function handler() {
        if (oReq.readyState == 4 /* complete */) {
            if (oReq.status == 200) {
                // this alert will be missing Content-Length 
                // and Content-Encoding if Content-Encoding is sent.
                alert(oReq.getAllResponseHeaders());
            }
        }
    }

    var oReq = getXMLHttpRequest();

    if (oReq != null) {
        oReq.open("GET", "http://www.example.com/gzipped/content.js", true);
        oReq.onreadystatechange = handler;
        oReq.send();
    }
    else {
        window.alert("AJAX (XMLHTTP) not supported.");
    }

1 Ответ

0 голосов
/ 21 сентября 2016

Можно заметить, что многие заголовки отсутствуют, в том числе наиболее значимые для вас: «Content-Encoding: deflate»

Это связано с тем, что после распаковки IE генерирует поддельные заголовки, согласно MVP: https://social.msdn.microsoft.com/Forums/ie/en-US/b2cc04ca-1d4e-4381-9750-361128987e2f/http-response-header-variable-returns-null-in-ie-11?forum=iewebdevelopment

...