CORS – ¿Cómo ‘de comprobaciones’ un objeto httprequest?

Estoy tratando de hacer una cruz de dominio petición HTTP al servicio de WCF (que tengo). He leído varias técnicas para trabajar con la cruz de dominio de secuencias de comandos de limitaciones. Porque mi servicio debe adaptarse tanto a GET y POST peticiones que no pueden poner en práctica algunos dinámica de la etiqueta script cuya src es la dirección URL de una solicitud GET. Desde que soy libre de hacer cambios en el servidor he empezado a tratar de implementar una solución que consiste en configurar el servidor de respuestas para incluir el «Access-Control-Allow-Origin» encabezado y ‘de comprobaciones’ a las solicitudes y las OPCIONES de solicitud. Tuve la idea de este post : Llegar CORS de trabajo

En el lado del servidor, en mi web, el método es la adición de ‘Access-Control-Allow-Origin: *’ a la respuesta HTTP. Puedo ver que las respuestas no incluyen este encabezado ahora. Mi pregunta es: ¿Cómo puedo ‘de comprobaciones’ una solicitud (OPCIONES)? Estoy usando jQuery.getJSON para hacer la solicitud GET, pero el navegador cancela la solicitud de inmediato con el infame:

Origen http://localhost no está permitido por Access-Control-Allow-Origin

Es cualquiera que esté familiarizado con este CORS técnica? ¿Qué cambios se deben hacer en el cliente de comprobaciones mi solicitud?

Gracias!

InformationsquelleAutor Nick | 2011-12-31

2 Kommentare

  1. 152

    Durante la comprobación previa solicitud, usted debe ver a las dos siguientes encabezados: Access-Control-Solicitud-Método y Control de Acceso de-Solicitud-de los Encabezados. Estos encabezados de solicitud se pide al servidor de permisos para realizar la solicitud real. Su comprobaciones necesidades de respuesta a reconocer estos encabezados en orden para la solicitud real de trabajo.

    Por ejemplo, supongamos que el navegador hace una petición con los siguientes encabezados:

    Origin: http://yourdomain.com
    Access-Control-Request-Method: POST
    Access-Control-Request-Headers: X-Custom-Header

    El servidor debe responder con los siguientes encabezados:

    Access-Control-Allow-Origin: http://yourdomain.com
    Access-Control-Allow-Methods: GET, POST
    Access-Control-Allow-Headers: X-Custom-Header

    Prestar especial atención a los Access-Control-Allow-Encabezados encabezado de respuesta. El valor de esta cabecera debe ser el mismo encabezados en el Control de Acceso-Solicitud-Encabezados encabezado de la solicitud, y no puede ser»*’.

    Una vez que el envío de esta respuesta a la comprobación previa solicitud, el navegador hará la solicitud real. Usted puede aprender más acerca de CORS aquí: http://www.html5rocks.com/en/tutorials/cors/

    • puede agregar varios dominios para Access-Control-Allow-Origin?
    • Usted probablemente trabajado en esto por ahora, pero en el caso de que otros se preguntan que pueden hacer Access-Control-Allow-Origin: *
    • Yo posiblemente perdido de algo. Lo tengo que enviar dos solicitudes XMLHttp? Una de las comprobaciones; comprobar la respuesta en caso de éxito y, a continuación, enviar la consulta real?
    • usted no necesita preocuparse por el envío de la solicitud de comprobaciones. Si la solicitud tiene un comprobaciones, el navegador enviará por usted.
    • GRACIAS por el ‘prestar especial atención’ poco… que resolver mi problema con el nodo/expressjs yo era capaz de añadir un filtro para atrapar estas comprobaciones las solicitudes de //cors and preflight filtering app.all('*', function(req, res, next){.. //preflight needs to return exact request-header res.set('Access-Control-Allow-Headers', req.headers['access-control-request-headers']); if ('OPTIONS' == req.method) return res.send(204);next(); });
    • Lo siento , un poco tarde , Pero la Cruz de dominio del servidor que estoy tratando de acceder a las obras de bien, cuando yo trate de un cliente Soap como boomerang , Pero no funciona cuando trato de localhost . ¿Por qué es eso ?
    • Eso es lo que estaba buscando. Gracias por tan lúcida explicación
    • no sólo tiene el servidor de verificación de la Origin/Referer encabezado? De hecho, el servidor tendrá que hacerlo de todos modos, así que ¿cuál es el punto de estos encabezados adicionales?
    • Bonita Respuesta. El uso de este me ha resuelto mi problema
    • salvó mi día👍.

  2. 0

    Aunque este hilo se remonta a 2014, el problema puede ser aún actual para muchos de nosotros. Aquí es cómo me trató con él en un jQuery 1.12 /PHP 5.6 contexto:

    • jQuery envió a su XHR solicitud utilizando sólo se limita encabezados; sólo ‘Origen’ fue enviado.
    • Ninguna comprobación previa petición era necesario.
    • El servidor sólo había para detectar este tipo de solicitud, y agregar el «Access-Control-Allow-Origin:» . $_SERVER[‘HTTP_ORIGIN’] header, después de detectar que este era un cruce de origen XHR.

    Código PHP de muestra:

    if (!empty($_SERVER['HTTP_ORIGIN'])) {
        //Uh oh, this XHR comes from outer space...
        //Use this opportunity to filter out referers that shouldn't be allowed to see this request
        if (!preg_match('@\.partner\.domain\[email protected]'))
            die("End of the road if you're not my business partner.");
    
        //otherwise oblige
        header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']);
    }
    else {
        //local request, no need to send a specific header for CORS
    }

    En particular, no agregar un exit; como ninguna de las comprobaciones que se necesita.

Kommentieren Sie den Artikel

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

Pruebas en línea