Aller au contenu principal

3. Link Serialisation in HTTP Headers (Sérialisation des liens dans les en-têtes HTTP)

Link实体头字段提供了一种在HTTP头中序列化一个或多个链接的方法。它在语义上等同于HTML的<link>元素。

Link头字段语法

Link       = #link-value
link-value = "<" URI-Reference ">" *( OWS ";" OWS link-param )
link-param = token BWS [ "=" BWS ( token / quoted-string ) ]

每个link-value传达一个链接。链接目标由尖括号(<>)内的URI-Reference表示。

默认情况下,链接的上下文是表示它出现的消息的有效请求URI(Effective Request URI),如[RFC7230]第5.5节中定义的。

当存在时,上下文由Target IRI确定。请注意,任何IRI都必须根据第2节转换为URI才能在Link头字段中表示。

3.3. Relation Type (关系类型)

链接关系类型由"rel"参数的值标识,其值必须(MUST)包含以下之一:

  • 注册的关系类型名称(参见第2.1.1节),或
  • 扩展关系类型(参见第2.1.2节)

注册的关系类型名称和扩展关系类型可以在同一个"rel"参数值中使用,由一个或多个空格字符分隔。

relation-type  = reg-rel-type / ext-rel-type
reg-rel-type = LOALPHA *( LOALPHA / DIGIT / "." / "-" )
ext-rel-type = URI

请注意,扩展关系类型被编码为URI;这意味着任何保留字符都需要根据[RFC3986]第2节进行百分号编码。

3.4. Target Attributes (目标属性)

链接的目标属性在link-value中表示为link-param。

3.4.1. Serialisation-Defined Attributes (序列化定义的属性)

"rel"参数必须(MUST)存在,但不能(MUST NOT)出现多次;如果它不存在或出现多次,则整个link-value无效。

同样,"anchor"参数(如果存在)必须(MUST)仅出现一次;如果它出现多次,则整个link-value无效。

其他常见的目标属性包括:

  • hreflang: 指示目标资源的语言。值必须(MUST)符合[RFC5646]。
  • media: 指示目标资源的预期显示媒体。值必须(MUST)符合[W3C.REC-css3-mediaqueries-20120619]。
  • title: 用于标记目标资源的人类可读标识符。
  • title*: 使用[RFC8187]中定义的编码的国际化版本的"title"参数。
  • type: 提供关于目标资源的媒体类型的提示。

3.4.2. Extension Attributes (扩展属性)

其他link-param值是扩展目标属性,可以由链接关系类型或链接的应用程序定义和使用。

扩展目标属性的出现或不存在不应该(SHOULD NOT)使link-value无效,但可能(MAY)影响其在特定应用程序中的使用。

例如:

Link: `http://example.com/TheBook/chapter2`; rel="previous";
title="previous chapter"

指示"previous chapter"可以在http://example.com/TheBook/chapter2找到。

Link: </>; rel="http://example.net/foo"

指示根资源("/")与自定义扩展关系类型"http://example.net/foo"相关。

Link: </terms>; rel="copyright"; anchor="#foo"

指示标识符为"foo"的资源的版权资源可以在/terms找到。

多个链接可以在单个Link头字段中传达:

Link: </TheBook/chapter2>; rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>; rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel

这里,两个链接都使用国际化的title参数。

也可以使用多个Link头字段:

Link: </TheBook/chapter2>; rel="previous"
Link: </TheBook/chapter4>; rel="next"