Запрос JQuery CORS не работает при отправке запроса диапазона

Я использую jQuery ajax-вызов, чтобы сделать запрос CORS и его работу, если я установил

var headers = {};

Но поскольку контент, который я пытаюсь получить, довольно большой, я бы хотел отправить заголовки диапазонов.

(все это проверено и работает в том же домене)

Итак, когда я делаю это:

var headers = {"Range":"bytes=" + start + "-" + end};


$.ajax({
    url:url,
    type:type,
    headers:headers,
    dataType:dataType,
    success:function (data, status, jqXHR) {

        //

    }, error:function (data, status, jqXHR) {

       //
    }
});

В наш другой домен запрос отменяется в последнем хроме и FF.

Если я отключу заголовки, все работает, но потом я получаю мегабайты данных, а браузер не может обрабатывать/анализировать этот объем данных.

Вот заголовки с сервера (я управляю этим, поэтому могу его редактировать)

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: OPTIONS, GET, POST
Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Range, Origin
Access-Control-Expose-Headers: Content-Range
Access-Control-Max-Age: 3600

Я сделал что-то не так, или отправка запроса диапазона по CORS еще не реализована должным образом в последних браузерах?

(Обратите внимание, что хром не возвращает заголовки, даже если я разрешаю их в Expose-Headers, но это известная ошибка в списке рассылки хрома, но я могу сначала получить запрос, чтобы узнать размер файла)

Ответ 1

У меня была аналогичная проблема при работе над моим последним проектом. Вот что я сделал:

1) на стороне сервера. Запрос OPTIONS возвращает заголовки Access-Control, например:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Max-Age: 1000
Access-Control-Allow-Headers: Origin, Content-Type, Accept

2) на методе POST сервера и добавить заголовок

Access-Control-Allow-Origin: *

3) в javascript:

jQuery.ajax({
        url: gate,
        type: "POST",
        data: JSON.stringify(post_data),
        contentType: "application/json; charset=UTF-8",
        crossDomain: true,
        success: function(data){
            //
        },
    });

Надеюсь, что это поможет