【发布时间】:2018-04-24 10:46:36
【问题描述】:
以下包含逗号的 HTTP Link 标头是否有效?
Link: <http://www.example.com/foo,bar.html>; rel="canonical"
RFC5988 说:
请注意,扩展关系类型必须是绝对 URI 链接头,如果它们包含分号 (";") 或 逗号 (",")(因为这些字符在标题中用作分隔符 本身)。
然而,这不包括#link-value。这必须是根据 RFC 3987 的 URI-Reference,这似乎允许这样做。链接头本身也可以有多个值,来自RFC5988 5.5 节:
Link: </TheBook/chapter2>;
rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>;
rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel
我正在使用 Apache HttpCore 4.4.9 中的 BasicHeaderValueParser 使用以下代码在 Java 中解析此链接标头:
final String linkHeader = "<http://www.example.com/foo,bar.html>; rel=\"canonical\"";
final HeaderElement[] parsedHeaders = BasicHeaderValueParser.parseElements(linkHeader, null);
for (HeaderElement headerElement : parsedHeaders)
{
System.out.println(headerElement);
}
在逗号上标记并打印以下内容:
<http://www.example.com/foo
bar.html>; rel=canonical
这是有效的行为吗?
【问题讨论】:
-
BWTW,RFC 5988 已被 RFC 8288 淘汰。