origin missing falta control chrome cabecera allow php angularjs http cors lighttpd

php - missing - falta la cabecera cors access control allow origin angular



Access-Control-Allow-Origin angularjs a php (3)

Como está haciendo un POST de dominio cruzado, Angular realiza una solicitud de OPCIONES previas al vuelo para verificar los encabezados de Access Origin antes de realizar el POST. La pestaña NET en su navegador lo confirmará. Su servidor no responde bien a la solicitud OPTIONS y, por lo tanto, Angular se niega a realizar el POST.

Si POSTAS a tu servidor con POSTMAN, ¿todo está bien?

Creo que es posible configurar Angular para no hacer la solicitud previa al vuelo.

De forma alternativa, configure su servidor para que responda correctamente a las solicitudes OPTIONS, en particular devolviendo los encabezados correctos de Access Origin en respuesta a la solicitud OPTIONS. (OPTIONS solo intenta averiguar si su servidor tiene estos encabezados configurados, si no lo ha hecho entonces ¿por qué molestarse en hacer el POST?)

Con suerte, esta información lo orientará en la dirección correcta.

mi escenario está compuesto por dos servidores web, uno local y otro remoto.

El servidor web local (Apache) procesa una aplicación web en la que quiero hacer una solicitud ajax al servidor web remoto (Lighttpd).

Solicitud de Ajax use angularjs $ http.

var req = { method: ''POST'', url: ''http://url/myphp.php'', headers: { ''Authorization'': ''Basic '' + btoa(''username:password''), ''Content-Type'': ''application/x-www-form-urlencoded'' }, xhrFields: { withCredentials: true }, crossDomain: true, data: xmlString } $http(req).then(function () { console.log("OK!"); });

La secuencia de comandos remota de php es:

<?php echo "You have CORS!"; ?>

Desafortunadamente, tengo un

401 Unhauthorized XMLHttpRequest cannot load http://url/myphp.php. Response to preflight request doesn''t pass access control check: No ''Access-Control-Allow-Origin'' header is present on the requested resource. Origin ''http://localhost:8888'' is therefore not allowed access. The response had HTTP status code 401.

El servidor web remoto tiene habilitar el modo de autenticación .htpasswd y la solicitud CORS configurada.

Sigue un pedazo de lighttpd.conf

setenv.add-response-header = ( "Access-Control-Allow-Origin" => "*" )


Para que add-response-header funcione en lighttpd, debe habilitar mod_setenv en su server.modules. Sin embargo, debes habilitar este mod_setenv antes de mod_status.

server.modules = ( # ... "mod_fastcgi", "mod_rewrite", "mod_redirect", "mod_setenv", ## before mod_status "mod_status", # ... )

Alternativamente, puede usar PHP para generar el encabezado cors

<?php header("Access-Control-Allow-Origin: *"); ?>

También quiero agregar que si está enviando datos http basic / digest auth no puede usar comodines para el origen. Tienes que usar el dominio fuente real

setenv.add-response-header = ( "Access-Control-Allow-Origin" => "example.com" ) setenv.add-response-header = ( "Access-Control-Allow-Credentials" => "true" )