首页 > 解决方案 > 链接:响应头 VS HTML

问题描述

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

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

标签: htmlhttphyperlinkheaderhttp-headers

解决方案


它们应该与@Evert 状态等效,因此理论上您可以使用其中任何一个。但是有一些注意事项:

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

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

另一方面,对于 HTML 版本,如果您有不同的需求(例如,在不同的页面中使用不同的字体),通常更容易为每个页面(或页面模板)配置它。

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

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

您提到了 HTTP/2 推送用例,它肯定需要标头(尽管这不是设置推送的定义标准方法,并且一些服务器或 CDN 使用其他方法,但很多都使用此方法)。然而,鉴于 HTTP/2 推送的复杂性和担忧,它可能会导致比它解决的问题更多的问题,这可能是推荐使用 HTML 方法以确保它永远不会被推送的原因。

总而言之,我建议在 HTML 中设置它。这更容易。

然而,其他类似的事情并非如此,可以在 HTML 和 HTTP 标头中设置。例如,CSP 在 HTML 版本中受到限制,缺少 HTTP Header 版本的某些功能,也不推荐使用,因为它可以使用 JavaScript 进行更改,而 HTTP 标头不能。但是对于简单的链接头,这些都不是问题。


推荐阅读