6

I'm currently working on a URL parser that formats and corrects relative links. I designate some characters to be special and included is "#".

I found that this becomes an issue when I'm processing pages that are developed with Angular, because makes use of #'s in the URL. However, in reading up on the IETF protocol for URL naming, it seems like #'s are reserved characters.

Can someone explain to me how Angular interacts with URL naming?

4

1 回答 1

19

路由策略

在 Angular 项目中配置应用程序路由时,可以在常规 HTML5 路由 ( PathLocationStrategy) 或“散列式 URL” 路由 ( HashLocationStrategy) 之间进行选择。

默认是PathLocationStrategy,但是可以通过{useHash: true}作为第二个参数传递给RouterModule.forRoot()函数来实现散列式路由

根据 Angular 关于LocationStrategy 和浏览器 URL 样式的官方文档:

旧版浏览器会在位置 URL 更改时向服务器发送页面请求,除非更改发生在“#”之后(称为“哈希”)。路由器可以通过将应用程序内的路由 URL 与散列组合来利用此异常。

为什么 Angular 支持哈希路由

URL 中的A#表示锚标识符 ( RFC1738 ),在链接到页面中的特定内容时非常有用。

角度漏洞利用的是符号之后的任何内容都不会发送到服务器HashLocationStrategy的事实- 这使得它非常适合用于存储应用程序状态。#

为什么有用

使用哈希路由在子页面上重新加载页面(或通过书签重新访问),例如

http://localhost:4200/#/articles/35

不向服务器查询子页面,而是返回主应用程序页面

http://localhost:4200/

这样服务器实现只需要知道根页面(这是唯一会被查询的东西)

使用PathLocationStrategy(默认)服务器需要设置为处理应用程序实现的每个 URL 的请求。

于 2018-09-29T10:45:47.677 回答