Tengo entendido que puede personalizar la página no encontrada configurando { path: '**', component: PageNotFoundComponent } en RouterMoudle.forRoot (rutas).
Sin embargo, devuelve el código de estado http 200. ¿Cómo puede devolver el código de estado 404?
En realidad, no devuelve ningún estado, esa página debe estar incluida con su aplicación, por lo que no obtendrá ningún estado porque no hay una solicitud.
No tiene sentido enviar un estado 404 ya que no hay una solicitud real cuando cambia de página en una aplicación angular (ya que es una aplicación de una sola página).
Incluso si su página 404 se encuentra en un módulo con carga diferida, debe obtener el estado 200 porque el paquete se cargó correctamente. Además, no puede cambiar el estado de una solicitud del lado del cliente.
Si usa la representación del lado del servidor (usando angular universal), entonces su servidor podría enviar un estado 404 en la carga de la página, pero eso no sería mientras el usuario navega de una página a otra que no existe.
La respuesta simple a su pregunta es Sí y No
depende de su escenario. Hay dos tipos de aplicaciones angulares.
Una aplicación Angular normal se ejecuta en el navegador, representando páginas en el DOM en respuesta a las acciones del usuario
Estas aplicaciones adoptan el enfoque normal en el que la aplicación completa o una parte de ella (usando la carga diferida) se carga dentro del navegador del cliente. Esta aplicación contiene muchos componentes pequeños. La navegación a estos componentes se administra mediante configuraciones de Angular Router .
Angular asigna rutas a estos componentes. Incluso PageNotFoundComponent es en realidad un componente y se coloca al final de todas las rutas en caso de que la URL no coincida con ninguna de las rutas definidas.
Dado que todo esto sucede en el navegador del cliente en el propio entorno de Angular. Por lo tanto, no se realiza ninguna solicitud HTTP al servidor.
Cuando no hay petición, no hay respuesta
Por lo tanto, no puede lograr el comportamiento deseado.
Hay otro tipo de aplicaciones angulares en las que la aplicación se representa desde el servidor en forma de html estático en lugar de ejecutarse en el navegador del cliente.
Angular Universal se ejecuta en el servidor, generando páginas de aplicaciones estáticas que luego se inician en el cliente. Esto significa que, por lo general, la aplicación se procesa más rápido, lo que brinda a los usuarios la oportunidad de ver el diseño de la aplicación antes de que se vuelva completamente interactiva.
En este caso, cada página de la aplicación angular proviene del servidor como respuesta a una solicitud HTTP.
Asi que
también es posible enviar el código de estado 404 al enviar
PageNotFoundComponental cliente.
La razón principal por la que querría enviar un error 404 con su componente es porque los motores de búsqueda no almacenan en caché ni indexan las páginas con estado 404.
Puede consultar este útil artículo que utiliza SSR con Angular Universal para lograr este comportamiento.
Supongo que estás mezclando dos conceptos aquí:
Con { path: '**', component: PageNotFoundComponent } usted define qué componente debe mostrarse, si su enrutador no puede resolver la URL dada. La solicitud se maneja en el lado del cliente y angular proporciona un componente/página definido y, por lo tanto, el código de estado http de la solicitud es 200, porque nunca hubo un recurso que no se pudo encontrar.
Por lo general, solo hay solicitudes http si la página 404 se carga de forma asíncrona o contiene recursos adicionales, como por ejemplo, imágenes.
Se producirá un HTTP 404 en el otro lado cuando un servidor web no pueda encontrar un recurso solicitado. Entonces, en este caso, un servidor maneja la respuesta y proporcionará el código de estado http correcto.
Entonces, en general, su caso de uso no tiene mucho sentido, porque si desea proporcionar una página de error 404 personalizada con angular, el código de respuesta http debe ser 200.