Tengo un dispositivo IoT con una API HTTP : estoy creando una interfaz HTML + JS muy simple sin componente de servidor.
Usando un XMLHttpRequest simple, puedo hacer llamadas a la API; sin embargo, tengo un problema con CORS; todas las llamadas a la API responden con un 200 y toman la acción adecuada en el dispositivo IoT; las llamadas devuelven los valores correctos de acuerdo con la pestaña de inspección de la red; sin embargo, no se devuelven datos a la devolución de llamada.
Dadas dos funciones:
// Helper API Request Method function call(host, cmd, callback) { var xhr = new XMLHttpRequest(); xhr.onload = function(data) { console.log(data); }; xhr.open("GET", "http://" + host + "/httpapi.asp?command=" + cmd); xhr.send(); } // Set output volume level (0->100) function a_vol(master, vol) { call(master, "setPlayerCmd:vol:" + vol); }Cuando llamo a la función en la consola JS, no tengo acceso al objeto devuelto:
a_vol("10.3.106.120", 80); undefined Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://10.3.106.120/httpapi.asp?command=setPlayerCmd:mute:0. (Reason: CORS header 'Access-Control-Allow-Origin' missing). Status code: 200.Observado en la pestaña Red:
El cuerpo de la respuesta no está disponible para los scripts (motivo: falta CORS Permitir origen)
Dado que no puedo editar el firmware del dispositivo para incluir los encabezados CORS, y que el dispositivo sigue respondiendo como se esperaba a los comandos de la API, ¿qué puedo hacer para evitar este mensaje de error y acceder al objeto devuelto, aunque sea una anulación de este dominio