CORS fallo en la solicitud con jQuery usando withCredentials y certificados de cliente

No puedo entender por qué este CORS petición es que no devuelve datos.

Estoy usando el Catalizador MVC en el backend, Firefox 24.0 como un navegador. jQuery 1.9.1. Por favor, tenga en cuenta la siguiente:

  1. otherdomain.com requiere un certificado de cliente.
  2. golpear a los recursos directamente devuelve los datos esperados. (https://otherdomain.com/resource/1) devuelve los datos adecuados.

Tengo una página simple que las pruebas de la solicitud:

<script type='text/javascript'>
                function get_data() {
                        console.log("running");
                        $.ajax({
                                url: "https://otherdomain.com/resource/1",
                                dataType: 'json',
                                type: 'GET',
                                xhrFields: {
                                        'withCredentials': true
                                },
                                crossDomain: true
                        }).success(function(data) {
                                console.log(data)
                                $('#output').html(data);
                        }).error(function(xhr, status, error) {
                                alert("error");
                                console.log(xhr);
                        });
                }

    $(document).ready(function() {
            get_data();
    });
    </script>

</script>

Aquí están mis encabezados de solicitud:

GET /resource/1 HTTP/1.1
Host: otherdomain.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: https://mydomain.com/test.html
Origin: https://mydomain.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Aquí están mis encabezados de respuesta. (copia de ver código fuente de la consola de firebug) puedo ver en mi catalizador de la salida de depuración que la solicitud se sirve como 200 OK y el contenido es enviado.

HTTP/1.1 200 OK
Date: Mon, 28 Oct 2013 19:31:08 GMT
Server: HTTP::Server::PSGI
Vary: Content-Type
Content-Length: 653
Content-Type: application/json
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 1800
X-Catalyst: 5.90030
Via: 1.1 otherdomain.com

Y se produce el error de la llamada ajax:

readyState: 0
responseText: ""
status: 0
statusText: "error"

firebug muestra la respuesta del cuerpo como vacío desde la solicitud del evento a pesar de que es un 200 OK.

Pensé que cuando el uso de ‘withCredentials’ un pre-pedido de vuelo era necesario, pero no veo OPCIONES de ser enviado a través de firebug.

También, no puedo ver el Access-Control-Request-Header que se añade por mi petición, por lo que no estoy de devolver cualquier Access-Control-Allow-Headers desde el servidor.

Ahora, el frontend del Catalizador es Apache2, y estoy usando proxypass en un virtual host para enviar la solicitud de catalizador en localhost:8080. No estoy seguro de si esto tiene alguna relevancia, pero pensé que podría ser importante. Debe ser transparente para el navegador, aunque.

Gracias por la ayuda!

  • Para asp.net núcleo de los usuarios frente a este problema, por favor use: servicios.AddCors(); después de la aplicación.UseCors( opciones => { opciones.WithOrigins(» * o un nombre de dominio «).AllowAnyMethod(); opciones.AllowCredentials(); } );
InformationsquelleAutor mikew | 2013-10-28

2 Kommentare

  1. 16
    1. OBTENER las solicitudes no se preflighted. Ver Aquí
    2. Al responder a una solicitud de credenciales de servidor, debe especificar un dominio, y no se puede utilizar comodines. (no se debe Access-Control-Allow-Origin: *). Ver Aquí
    • gah. Yo había Access-Control-Allow-Origin: <origin> encuentra en una iteración de mi programa, pero no con la Allow-Control-Allow-Credentials: true. Me mudé de nuevo a utilizar * de Origen cuando he añadido Permitir-Credenciales. Yo no era consciente de ese requisito. Muchas gracias por el puntero! Ahora trabajar.
    • Tenga en cuenta que no es cierto que las solicitudes GET nunca preflighted. Las solicitudes GET puede ser preflighted si la solicitud contiene los encabezados personalizados.
  2. 0

    Tengo un problema similar, donde todo funciona bien en Chrome, pero me da 405 para todas las peticiones del dominio en Firefox (y similares problemas con IE). He intentado añadir xhrFields, y el crossDomain bandera. También estoy usando beforeSend para hacer realidad un xhr.withCredentials = true. Me aseguré de que tengo nombre de host partido en el servicio de backend. Yo uso el Access-Control-Allow-Credenciales de cabecera.

    Lo que podría ser diferente… yo sólo enviar estos encabezados cuando el Origen de encabezado está presente, porque si no me da Origen, mi única respuesta para Access-Control-Allow-Origin podría ser * porque no sabría lo que el origen es.

Kommentieren Sie den Artikel

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

Pruebas en línea