跳到主要内容

3. Link Serialisation in HTTP Headers

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

Link头字段语法

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

每个link-value传达一个链接.链接目标由尖括号(&lt;>)内的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: `&lt;/terms>`; rel="copyright"; anchor="#foo"

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

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

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

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

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

Link: `&lt;/TheBook/chapter2>`; rel="previous"
Link: `&lt;/TheBook/chapter4>`; rel="next"