origin missing has cross control check been allow angularjs nginx cross-domain cors

angularjs - missing - has been blocked by cors policy nginx



angular js nginx cors-Sin encabezado ''Access-Control-Allow-Origin'' (1)

así que la respuesta fue simple y molesta.

Mi servidor de desarrollo se configuró para permitir nombres de archivo vagamente interpretados, así que:

Request URL:http://otherSite/shfofx/PHP/Add/addTrade

resolvería addTrade.php, y el código se ejecutaría como se esperaba. En mi servidor de prueba, sin embargo, el servidor está configurado para devolver solo la página exacta sensible a mayúsculas y minúsculas solicitada. Entonces, la solicitud POST devolvía un estado de ''404 No encontrado''.

Para empeorar las cosas, la pestaña de red de Chrome no retransmite la respuesta 404 solo el error "Control de acceso-Permitir-Origen". No fue hasta que inspeccioné la respuesta del servidor Firefox que pude determinar y resolver el problema.

Simplemente cambié:

Request URL:http://otherSite/shfofx/PHP/Add/addTrade

a:

Request URL:http://otherSite/shfofx/PHP/Add/addTrade.php

y eso fue todo.

Sé que se me han hecho diferentes versiones de esta misma pregunta, he leído todas las preguntas y respuestas relacionadas que pude encontrar en SO y Google.

Estoy tratando de hacer una solicitud de dominio cruzado desde una aplicación angularJS a un servidor nginx. Todas las solicitudes GET se comportan correctamente, pero mi solicitud POST no funciona.

Chrome me estaba dando un error de ''Access-Control-Allow-Origin'', así que agregué lo siguiente a mi configuración de servidor nginx:

location / { if ($http_origin ~* (https?://.*/.mysite/.com(:[0-9]+)?)) { set $cors "true"; } if ($request_method = ''OPTIONS'') { set $cors "${cors}options"; } # non-OPTIONS indicates a normal CORS request if ($request_method = ''GET'') { set $cors "${cors}get"; } if ($request_method = ''POST'') { set $cors "${cors}post"; } # if it''s a GET or POST, set the standard CORS responses header if ($cors = "trueget") { add_header ''Access-Control-Allow-Origin'' "$http_origin"; #add_header ''Access-Control-Allow-Credentials'' ''true''; } if ($cors = "truepost") { add_header ''Access-Control-Allow-Origin'' "$http_origin"; #add_header ''Access-Control-Allow-Credentials'' ''true''; } if ($cors = "trueoptions") { add_header ''Access-Control-Allow-Origin'' "$http_origin"; #add_header ''Access-Control-Allow-Credentials'' ''true''; # # Return special preflight info # add_header ''Access-Control-Max-Age'' 1728000; add_header ''Access-Control-Allow-Methods'' ''GET, POST, OPTIONS''; add_header ''Access-Control-Allow-Headers'' ''Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since''; add_header ''Content-Length'' 0; add_header ''Content-Type'' ''text/plain charset=UTF-8''; return 204; } }

la solicitud OPTIONS devuelve el estado de 204 y los encabezados agregados como se esperaba:

Request URL:<code>http://otherSite/shfofx/PHP/Add/addTrade</code> Request Method:OPTIONS Status Code:204 No Content Request Headers Accept:*/* Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Access-Control-Request-Headers:accept, x-requested-with, content-type Access-Control-Request-Method:POST AlexaToolbar-ALX_NS_PH:AlexaToolbar/alxg-3.2 Cache-Control:no-cache Connection:keep-alive Host:otherSite Origin:<code>http://test-shf.mysite.com</code> Pragma:no-cache Referer:<code>http://test-shf.mysite.com/portfolio</code> User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 Response Headersview source Access-Control-Allow-Headers:Authorization,Content-Type,Accept,Origin,User- Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Requested-With,Keep-Alive,If-Modified-Since Access-Control-Allow-Methods:GET, POST, OPTIONS Access-Control-Allow-Origin:<code>http://test-shf.mysite.com</code> Access-Control-Max-Age:1728000 Connection:keep-alive Content-Length:0 Content-Type:text/plain charset=UTF-8 Date:Thu, 02 Jan 2014 22:54:58 GMT Server:nginx/1.2.6 (Ubuntu)

Luego veo una llamada de red con la solicitud POST en la pestaña de la red de Chrome que se cancela con la siguiente salida de la consola:

XMLHttpRequest cannot load <code>http://otherSite/shfofx/PHP/Add/addTrade</code>. No ''Access-Control-Allow-Origin'' header is present on the requested resource. Origin ''http://test-shf.mysite.com'' is therefore not allowed access.

la información del encabezado para la solicitud de POST cancelada es:

Request URL:<code>http://otherSite/shfofx/PHP/Add/addTrade</code> Request Headers Accept:application/json, text/plain, */* Cache-Control:no-cache Content-Type:application/json;charset=UTF-8 Origin:<code>http://test-shf.mysite.com</code> Pragma:no-cache Referer:<code>http://test-shf.mysite.com/portfolio</code> User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 X-Requested-With:XMLHttpRequest Request Payload {UserFIID:0, FinancialInstID:4, FinancialInstName:undefined, UserID:1, SHFUserID:1,…}

¿Por qué se permite la solicitud de OPCIONES de verificación previa pero se cancela mi solicitud de POST?