Link:响应Header VS HTML

Link: Response Header VS HTML

我目前正在开发一项功能,以协助准备 Link: HTTP header 或一组 <link> 标签,并且在阅读有关此的不同材料时,我仍然无法找到简单问题的答案:何时使用 Link: header 以及何时使用 <link>.
目前只能说,如果要使用HTTP20服务器推送,建议使用header。另一方面,即使我推送样式表,它也不会被应用,除非 HTML 输出中有相应的标签。
由于我正在准备库以帮助进行一些标准化和清理,因此我想至少捕获一些像这样的“奇怪”案例,如果可能的话,但为此我需要一些建议或最佳实践那方面。遗憾的是,到目前为止我找不到任何东西,所以我求助于更有知识的人:我应该考虑捕获哪些最佳实践或奇怪的案例,或者我应该只允许发送任何内容,而不管它是 header 还是标签?

如果有人感兴趣,代码在 https://github.com/Simbiat/HTTP20/blob/main/src/Headers.phplinks 函数)中。

它们应该与@Evert 声明的一样,所以理论上您可以使用其中任何一个。但是有一些注意事项:

Headers 通常在 Web 服务器配置中设置(至少对于静态页面),这对开发人员来说可能不那么容易更新。

然而,它还有一个额外的优势,即您可以同时为多个页面设置这些字体(例如,在每个 .html 文件上预加载您的核心字体,而不必记住在所有页面上进行设置,或所有页面模板(如果使用 CMS)。

另一方面,如果您有不同的需求(例如,不同的页面使用不同的字体),HTML 版本通常更容易按页面(或页面模板)进行配置。

还有一些人说在 header 中执行此操作有轻微的性能考虑,但老实说,只要它在 <HEAD> 元素中足够高,我真的认为你很难做到注意这个。

也许更重要的是,如果您的网络服务器隐藏在其他基础设施(例如 CDN 或其他代理)之后,它是否会逐跳传递。理论上应该是,对于简单的 headers,但是对于像 HTTP/2 push 这样的东西,就没那么容易了。如果它在 HTML 中,则无需担心这一点(当然假设中介没有更改标记!)。

您提到了 HTTP/2 推送用例,那肯定需要 header(虽然这不是设置推送的定义标准方法,一些服务器或 CDN 使用其他方法,但许多使用这个)。然而,考虑到 HTTP/2 推送的复杂性和问题,它可能导致比它解决的问题更多的问题,这可能是推荐 HTML 方法以确保它永远不会被推送的原因。

总而言之,我建议在 HTML 中设置此项。更简单。

但是其他类似的东西不是这种情况,可以在 HTML 和 HTTP header 中设置。例如,CSP 在 HTML 版本中受到限制,缺少 HTTP Header 版本的某些功能,并且也不推荐使用 JavaScript 而 HTTP header 可以更改它] 不能。但对于简单的 Link header 来说,这些都不是问题。