Tenemos una aplicación Angular/Ionic instalada en iPhone y Android. La aplicación llama a una API en nuestro servidor web IIS. Cuando el servidor está activo, todo funciona bien.
Sin embargo, mientras implementamos una nueva versión del sitio web de la API, nos gustaría que nuestra aplicación muestre una página de mantenimiento. Actualmente, durante la implementación, creamos un archivo app_offline.htm en la carpeta raíz del sitio de la API, que es la forma habitual de desconectar un sitio web y mostrar una página de mantenimiento en IIS.
Desafortunadamente, esto significa que la solicitud de verificación previa de CORS de nuestra aplicación Ionic también devuelve un código de error 503 http; Supongo que IIS elimina todo el sitio. No podemos manejar este error 503 en la aplicación Angular/Ionic en el teléfono, ya que el navegador activa la solicitud de verificación previa. Agregamos encabezados personalizados a cada solicitud, que no se pueden evitar. El resultado neto es que la página de mantenimiento no se muestra cuando el sitio de la API está inactivo.
¿Hay alguna manera de mostrar una página de mantenimiento en nuestra aplicación Ionic/Angular mientras se implementa el sitio API? ¿Quizás configurando IIS para permitir solicitudes de verificación previa incluso cuando app_offline.htm está en su lugar, manejando de alguna manera el 503 en el lado Ionic, o incluso deteniendo la solicitud de OPCIONES de verificación previa de la aplicación Ionic?
NOTA: NO estoy preguntando cómo configurar mi sitio para resolver un problema de CORS, esa parte ya está en su lugar. Quiero manejar un error de CORS esperado cuando ocurre en la aplicación mientras se implementa el sitio de la API de soporte.
Por razones de seguridad, los detalles sobre lo que salió mal con una solicitud de CORS no están disponibles para el código JavaScript. Todo lo que el código sabe es que ocurrió un error. La única forma de determinar qué salió mal específicamente es mirar la consola del navegador para obtener más detalles.
Puede obtener más información aquí en developer.mozilla.org
Mi sugerencia es manejar cualquier error de solicitud como cualquier otro, dentro de un interceptor.
Luego puede hacer uso de las propiedades en el objeto de error (como un estado de 0) para decidir si debe verificar si está en modo de mantenimiento, o simplemente puede verificar el modo siempre que tenga algún error.
Para hacer esto, puede verificar si la página app_offline.htm está actualmente activa o no con una solicitud web, o puede utilizar una API separada para determinar si actualmente está en modo de mantenimiento o no.
Luego tome las acciones apropiadas basadas en esa respuesta.
tal vez discutir entre ustedes sobre el enfoque de 2 sitios/api. API adicional para manejar todas las solicitudes (responde con los encabezados necesarios y tal vez un mensaje/estado de mantenimiento para que la aplicación los maneje) cuando se actualiza la API real.
El siguiente es un artículo sobre cómo favorecer el método de 2 sitios. aunque el host ofrece contenido estático y no una API, se puede seguir un patrón similar
https://www.vegait.rs/media-center/blog/offline-maintenance-mode-in-iis
"No podemos manejar este error 503 en la aplicación Angular/Ionic en el teléfono, ya que el navegador activa la solicitud de verificación previa". ¿Cómo no puedes manejar los errores?
Todas las solicitudes http.get tienen rutinas de prueba/captura que puede usar. Si no se reciben datos del servidor, retroceda/navegue a otra página, mostrando que el servidor API está inactivo por mantenimiento.