Ajax CORS Solicitud con http 401 en comprobaciones

Estoy luchando por horas ahora. Quiero hacer una simple petición ajax a otro dominio, pero obtener de Error http 401 todo el tiempo:

jQuery(document).ready(function($){
  var challengeid = $('#codepressHook').data('challengeid');
  var clicked = false;
  $('#codepressHook').click(function(){
    if(!clicked){
      $.ajax({
        url: "https://dev.radbonus.com/admin/affiliate-connections/retrieveSingle/"+challengeid+".json",
        method: "GET",
        dataType: "json",
        jsonp: false,
        contentType: "application/json",
        xhrFields: {
          withCredentials: true
        },
        beforeSend: function(xhr){
          xhr.setRequestHeader("Authorization", "Basic "+ btoa(username+":"+password));
        },
        success: function(data){
          $('#codepressHock').html(data.data.code);
        },
        error: function(error){
          alert(error);
        }
      });
    }
  });
});

I conjunto de todos los CORS encabezados en el serverside. Aquí está el tráfico de la red:

Request URL:https://dev.radbonus.com/admin/affiliate-connections/retrieveSingle/45.json
Request Method:OPTIONS
Status Code:401 Unauthorized
Remote Address:185.102.94.230:443
Referrer Policy:no-referrer-when-downgrade

Response Headers
view source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type, X-Requested-With, Authorization, Origin
Access-Control-Allow-Methods:POST, GET, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:http://radbonus.com
Access-Control-Max-Age:31536000
Content-Length:463
Content-Type:text/html; charset=iso-8859-1
Date:Sat, 24 Jun 2017 11:25:33 GMT
Server:Apache/2.4.18 (Ubuntu)
WWW-Authenticate:Basic realm="Admin"

Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Access-Control-Request-Headers:authorization,content-type
Access-Control-Request-Method:GET
Connection:keep-alive
Host:dev.radbonus.com
Origin:http://radbonus.com
Referer:http://radbonus.com/plugintest/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

Sé que hay un montón de posts sobre este tema, pero parece que me estoy perdiendo algo simple. Podría alguien ayudarme?

  • El servidor de backend de dev.radbonus.com, debe ser configurado para responder a las OPCIONES de las solicitudes con un 200 o 204 mensaje de éxito, al menos para las solicitudes de radbonus.com y al menos para las solicitudes de la ruta ‘/admin/afiliado-conexiones/retrieveSingle/45.json’. Usted probablemente desea utilizar stackoverflow.com/posts/44735921/edit para actualizar/editar la pregunta para agregar los detalles sobre lo que el software se está ejecutando en el servidor de dev.radbonus.com—porque sin esa información, aquí nadie va a poder ayudarte mucho más
  • Lo que yo veo. ¿Sabes cómo hacer eso con haproxy? Porque no puedo encontrar nada de eso en la web.

2 Kommentare

  1. 7

    ACTUALIZACIÓN Parece que no era la correcta. Authorization encabezado nunca es enviado para OPTIONS solicitud. Por favor, consulte comentario por sideshowbarker – usted necesita para asegurarse de que su servidor no responde con 401 a OPTIONS solicitud.

    No sé qué idioma es el servidor escrito en el, pero de la implementación de autorización en la forma incorrecta de las OPCIONES de método debe ser excluido de auth. Ver también aquí – Solicitud de OPCIONES de autenticación

    A continuación es obsoleto respuesta:

    Su serverside requiere autenticación Básica de HTTP para esta solicitud. Y no proporcionar credenciales. 401 error no tiene nada que ver con CORS; lo que significa que el servidor decida no autorizar su petición porque no proporcionar la autenticación de credenciales.

    Si intenta abrir esta url (como https://dev.radbonus.com/admin/affiliate-connections/retrieveSingle/1.json) directamente en el navegador, se le pedirá que introduzca el nombre&contraseña, que es la forma en que el navegador se encarga de error 401 con WWW-Authenticate encabezado.

    Por favor, observe que Authorization encabezado en realidad no se incluye con su solicitud.
    Así que en lugar de utilizar beforeSend gancho, usted probablemente debería incluir la cabecera directamente en su llamada:

    headers: {
        'Authorization': 'Basic ' + btoa(username+':'+password),
    },

    Y asegúrese de que Authorization encabezado presenta en su solicitud.

    • Pero ¿por qué no agregar el encabezado, a pesar de que yo en el antes de que el envío de devolución de llamada?
    • Mi mal, yo no me di cuenta de que usted citó encabezados por OPTIONS método. Nunca incluye el encabezado de Autorización. Así que usted debe ajustar su servidor para permitir OPCIONES de peticiones sin autorización. Por favor ver respuesta actualizada.
    • Muchas gracias. Que resuelto el problema.
  2. 0

    Por favor, agregue cruz de dominio en los encabezados como este:

    $.ajax({
            url: "https://dev.radbonus.com/admin/affiliate-connections/retrieveSingle/"+challengeid+".json",
            method: "GET",
            dataType: "json",
            jsonp: false,
            contentType: "application/json",
            xhrFields: {
              withCredentials: true
            },
            crossDomain: true,
            beforeSend: function(xhr){
              xhr.setRequestHeader("Authorization", "Basic "+ btoa(username+":"+password));
     xhr.setRequestHeader("Access-Control-Allow-Origin",'*');
            },
            success: function(data){
              $('#codepressHock').html(data.data.code);
            },
            error: function(error){
              alert(error);
            }
          });
    • Hey, pero Access-Control-Allow-Origin debe ser puesto de lado del servidor, no del lado del cliente, a la derecha? Y ya está configurado.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea