Невозможно установить заголовок с помощью Cors и Ajax

Привет, я пытаюсь сделать http-запрос с помощью Basic Auth, но я не могу установить авторизацию заголовка, и это разрешено на сервере.

Аякс:

  $.ajax({  


        xhrFields: {  withCredentials: true  },
        beforeSend: function(xhr){xhr.setRequestHeader('authorization', 'Basic cmFmmFuQHBoaWlubm92YXRpb25zLmNv=');},
        url : 'http://www.vozi.dev.br/api/audio',           
        type: 'POST',
        data:  JSON.stringify(sender),
        dataType: 'json',
        contentType: 'application/json',
        success : function(data, textStatus, jqXHR) {   
                    //do something


        }

    });

Заголовок HTTP-запроса:

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,pt;q=0.6
Access-Control-Request-Headers:accept, authorization, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:www.vozi.dev.br
Origin:http://localhost:8080
Referer:http://localhost:8080/act_text.jsp
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36

Заголовок HTTP-ответа:

Access-Control-Allow-Headers:accept, authorization, content-type
Access-Control-Allow-Methods:GET, POST, OPTIONS
Access-Control-Allow-Origin:*
cache-control:no-cache
Connection:Keep-Alive
Content-Type:text/html; charset=UTF-8
Date:Wed, 14 May 2014 20:15:53 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.4.6 (Ubuntu)
Set-Cookie:PHPSESSID=k6gg748e47b2fv67; path=/
Transfer-Encoding:chunked
www-authenticate:Basic realm="Secured Area"
x-debug-token:5373cef9430fe
X-Powered-By:PHP/5.5.3-1ubuntu2

Ошибка :

OPTIONS http://www.vozi.dev.br/api/audio 401 (A Token was not found in the   SecurityContext.) jquery.js:8706
OPTIONS http://www.vozi.dev.br/api/audio Invalid HTTP status code 401 jquery.js:8706
XMLHttpRequest cannot load http://www.vozi.dev.br/api/audio. Invalid HTTP status code 401 

person rtrevizan    schedule 14.05.2014    source источник


Ответы (2)


Я предполагаю, что у вас возникла эта проблема с IE10 или IE11. Это не проблема с Chrome. IE не отправляет заголовки авторизации с запросом OPTIONS, поэтому на стороне сервера, если вы включаете встроенную проверку подлинности Windows, он отклоняет запрос OPTIONS.

У меня есть этот обходной путь, опубликованный в другом вопросе о стеке.

person Sathish Naga    schedule 15.05.2014
comment
Привет, спасибо за ответ, я использую Chome и Firefox, оба с ошибкой стыда. - person rtrevizan; 15.05.2014
comment
у меня это сработало в Chrome, не знаю, почему это не работает у вас!! - person Sathish Naga; 16.05.2014
comment
Никакие браузеры не будут отправлять заголовки авторизации или любые другие настраиваемые заголовки вместе с предварительной проверкой. Это нарушит спецификацию CORS. Подробнее об этом можно прочитать здесь:w3.org/TR/cors/#preflight- запрос - person Ray Nicholus; 16.05.2014

Я узнаю, что я не могу использовать

  Access-Control-Allow-Origin:*

если я использую

  withCredentials: true

Необходимо установить происхождение.

person rtrevizan    schedule 15.05.2014
comment
да, у меня есть фильтр для запроса параметров, он получает источник из запроса и добавляет к ответу, var origin = httpReq.Headers.Get("Origin"); httpRes.AddHeader(HttpHeaders.AllowOrigin, origin); - person Sathish Naga; 16.05.2014