WebKit “Отказался устанавливать небезопасный заголовок 'довольная длина'”

Я пытаюсь реализовать простую xhr абстракцию и получаю это предупреждение при попытке установить заголовки для POST. Я думаю, что это могло бы иметь некоторое отношение к установке заголовков в отдельном js файле, потому что, когда я установил их в <script> тег в .html файле, это хорошо работало. Запрос THE POST хорошо работает, но я получаю это предупреждение, и любопытно почему. Я получаю это предупреждение для обоих content-length и connection заголовки, но только в браузерах WebKit (бета Chrome 5 и Safari 4). В Firefox я не получаю предупреждений, заголовок Довольной Длины установлен на правильное значение, но Соединение установлено на активный вместо завершения, которое заставляет меня думать, что это также игнорирует мои вызовы setRequestHeader и генерирует свой собственный. Я не попробовал этот код в IE. Вот разметка и код:

test.html:

<!DOCTYPE html>
<html>
    <head>
        <script src="jsfile.js"></script>
        <script>
            var request = new Xhr('POST', 'script.php', true, 'data=somedata',  function(data) { 
                console.log(data.text); 
            });
        </script>
    </head>
    <body>
    </body>
</html>

jsfile.js:

function Xhr(method, url, async, data, callback) {
    var x;
    if(window.XMLHttpRequest) {
        x = new XMLHttpRequest();

        x.open(method, url, async);

        x.onreadystatechange = function() {
            if(x.readyState === 4) {
                if(x.status === 200) {
                    var data = {
                        text: x.responseText,
                        xml: x.responseXML
                    };
                    callback.call(this, data);
                }
            }
        }

        if(method.toLowerCase() === "post") {
            x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            x.setRequestHeader("Content-Length", data.length);
            x.setRequestHeader("Connection", "close");
        }

        x.send(data);
    } else {
        // ... implement IE code here ...
    }
    return x;
}
47
задан 12 April 2010 в 17:34
поделиться

1 ответ

он также игнорирует мои вызовы setRequestHeader и генерирует свои собственные

Да, стандарт говорит, что он должен:

По соображениям безопасности эти шаги должны быть прекращены, если заголовок [...]

  • Connection
  • Content-Length

Возникновение с ними может привести к различным запрос контрабанды атак, поэтому браузер всегда использует свои собственные значения. Нет необходимости или причин пытаться установить длину запроса, поскольку браузер может сделать это точно, исходя из длины данных, которые вы передаете в send () .

64
ответ дан 26 November 2019 в 19:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: