twk*_*twk 7 angular2-routing angular
我的理解是,可以通过设置{ path: '**', component: PageNotFoundComponent }为RouterMoudle.forRoot(routes)来自定义“未找到”页面。
但是,它返回http状态代码200。如何返回状态代码404?
n00*_*dl3 10
实际上,它不会返回任何状态,该页面应该与您的应用捆绑在一起,因此您不会获得任何状态,因为没有请求。
发送404状态毫无意义,因为当您在角度应用程序(因为它是单页应用程序)中更改页面时,没有真正的请求。
即使您的404页面位于延迟加载的模块中,您也必须获得200状态,因为捆绑包已正确加载。另外,您不能在客户端更改请求的状态。
如果使用服务器端渲染(使用角度通用),则服务器可能能够在页面加载时发送404状态,但是当用户浏览器从一个页面切换到另一个页面时,状态将不会发送。
您问题的简单答案是“是”和“否”
这取决于你的场景。有两种类型的 Angular 应用程序。
一个普通的 Angular 应用程序在浏览器中执行,在 DOM 中渲染页面以响应用户操作
这些应用程序采用整个应用程序或其中的一部分(使用延迟加载)在客户端浏览器中加载的正常方法。此应用程序包含许多小组件。这些组件的导航由 Angular Router配置管理。
Angular 为这些组件分配路径。甚至PageNotFoundComponent实际上是一个组件,它被放置在所有路由的末尾,以防 URL 与任何定义的路径不匹配。
由于所有这些都发生在 Angular 自己环境中的客户端浏览器中。因此不会向服务器发出 HTTP 请求。
当没有请求时,没有响应
因此,您无法实现所需的行为。
还有另一种类型的 Angular 应用程序,其中应用程序以静态 html 的形式从服务器呈现,而不是在客户端浏览器中执行。
Angular Universal在服务器上执行,生成静态应用程序页面,稍后在客户端引导。这意味着应用程序通常呈现得更快,让用户有机会在应用程序完全交互之前查看应用程序布局。
在这种情况下,Angular 应用程序的每个页面都来自服务器作为 HTTP 请求的响应。
所以
发送
PageNotFoundComponent到客户端时也可以发送 404 状态代码。
您希望通过组件发送 404 错误的主要原因是搜索引擎不会缓存和索引具有 404 状态的页面。
您可以查看这篇有用的文章,该文章使用 SSR 和 Angular Universal 来实现此行为。
我猜你在这里混合了两个概念:
如果{ path: '**', component: PageNotFoundComponent }您的路由器无法解析给定的 url,您可以定义应显示的组件。请求在客户端处理,Angular 提供定义的组件/页面,因此请求 http 状态代码为 200,因为从来没有找不到资源。
如果 404 页面是异步加载的或者包含任何额外的资源(例如图像),通常只有 http 请求。
当网络服务器找不到所请求的资源时,另一端就会出现 HTTP 404。因此在这种情况下,服务器会处理响应并提供正确的 http 状态代码。
因此,总而言之,您的用例没有多大意义,因为如果您想使用 Angular 提供自定义 404 错误页面,则 http 响应代码必须为 200。
| 归档时间: |
|
| 查看次数: |
4474 次 |
| 最近记录: |