3. Link Serialisation in HTTP Headers
Link实体头字段提供了一种在HTTP头中序列化一个或多个链接的方法。它在语义上等同于HTML的<link>元素。
Link头字段语法
Link = #link-value
link-value = "`<" URI-Reference ">`" *( OWS ";" OWS link-param )
link-param = token BWS [ "=" BWS ( token / quoted-string ) ]
3.1. Link Target (链接目标)
每个link-value传达一个链接。链接目标由尖括号(< 和 >)内的URI-Reference表示。
3.2. Link Context (链接上下文)
默认情况下,链接的上下文是表示它出现的消息的有效请求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)影响其在特定应用程序中的使用。
3.5. Link Header Field Examples (Link头字段示例)
例如:
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"