Можно ли заставить jQuery делать вызовы AJAX для URL-адресов с включенным gzip / deflate? - PullRequest
22 голосов
/ 23 сентября 2010

У меня есть веб-сервис, который готов выводить данные gzip / deflated. Я проверил, что сервис будет отвечать необработанным JSON или gzip'd JSON, используя wget и curl.

Я хочу использовать этот веб-сервис с помощью вызова jQuery AJAX.

По умолчанию вызов $ .ajax, предоставляемый jQuery, не добавляет заголовок HTTP-запроса «Accept-Encoding: gzip», необходимый веб-серверу для ответа данными gzipped.

Однако, когда я использую собственные методы jQuery для добавления заголовка, например:

$.ajax({url: 'http://foo.com/service.json',
        beforeSend: function(xhr) { 
            console.log('xhr set'); 
            xhr.setRequestHeader('Accept-Encoding', 'deflate') 
       } 
});

, тогда в консоли браузера появляется следующая ошибка:

Refused to set unsafe header "Accept-Encoding"

Можно ли заставить jQuery выполнять вызовы AJAX для URL-адресов с включенным gzip / deflate?

Если нет, то это недостаток в jQuery или что-то более фундаментальное в AJAX?

1 Ответ

41 голосов
/ 23 сентября 2010

Браузеры автоматически добавляют заголовок accept-encoding по мере необходимости, в том числе по запросам XHR. Вам не нужно делать это на уровне DOM / JS.

...