En el navegador, cuando abro mi sitio web escribiendo solo mywebsite.com , la solicitud de ajax llega con éxito a mi servicio web de descanso. Pero cuando escribo www.mywebsite.com , aparece el error: XMLHttpRequest no puede cargar http://mywebsite.com/path La respuesta a la solicitud de verificación previa no pasa la verificación de control de acceso: No 'Access-Control-Allow-Origin' el encabezado está presente en el recurso solicitado. Origen ' http://www.mywebsite.com ' por lo tanto, no se permite el acceso.
La solicitud Jquery ajax es-
return $.ajax({ url: " http://mywebsite.com/path/ ", escriba: "POST",
El sitio web se implementa en el servidor de AWS y, a continuación, se muestra la configuración de CORS
<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <MaxAgeSeconds>3000</MaxAgeSeconds> <ExposeHeader>x-amz-server-side-encryption</ExposeHeader> <ExposeHeader>x-amz-request-id</ExposeHeader> <ExposeHeader>x-amz-id-2</ExposeHeader> <AllowedHeader>*</AllowedHeader> </CORSRule> </CORSConfiguration>No puedo encontrar la solución de por qué agregar www crea un problema.
Resulta que su sitio no está en Amazon S3, por lo que no estoy seguro de por qué mostró un ejemplo de edición de una configuración CORS en un depósito S3.
Su sitio en realidad se está ejecutando en Apache Coyote en un servidor EC2.
El problema real aquí está en su javascript. En el archivo MarketProfile.js , tiene algunas cadenas mínimamente ofuscadas usando hexadecimal.
return $.ajax({url:" \x68\x74\x74\x70\x3A\x2F\x2F\x62\x72\x65\x61\x6B\x69\x6E\x67\x74\x72\x61\x64 \x65\x2E\x63\x6F\x6D\x2F\x72\x65\x73\x74\x2F\x72\x65\x73\x74\x2F\x63\x6F\x6D \x62\x69\x6E\x65\x64Eso es equivalente a esto:
http://breakingtrade.com/rest/rest/combinedCuando carga esto desde el sitio web principal, no es de origen cruzado. Cuando lo carga desde el sitio www, es una solicitud de origen cruzado, porque el nombre de host es diferente.
Solucionar esto debería ser tan simple como hacer que url sea una ruta absoluta simple, especificando solo '/rest/rest/combined' para esta cadena, en lugar de incluir 'http://breakingtrade.com' al principio de la cadena.
De lo contrario, deberá descubrir cómo hacer que su servidor o al menos este recurso en particular devuelva encabezados CORS ... pero si lo hace, por supuesto, querrá ser selectivo en qué orígenes permite, a menos que quiere que otras personas usen su servidor para agregar datos a sus sitios web (lo que podría suceder mucho más fácilmente si permite que cualquier sitio haga una solicitud de origen cruzado).