什么是HTTP头元素?

3
根据Apache文档,“一些HTTP头(例如set-cookie头)具有可分解为多个元素的值”。 我无法理解这句话。例如,当我在值为“Set-Cookie”的Header对象上使用getElements()方法时:
SESSIONID=abcdefg01234; Path=/; Expires=Wed, 09 Jun 2021 10:18:14 GMT

我得到了一个包含两个HeaderElement元素的数组,其中一个HeaderElement元素为:
SESSIONID=abcdefg01234; Path=/; Expires=Wed

另一个是:

09 Jun 2021 10:18:14 GMT

这对您有多大帮助呢?对于这些HeaderElement,我可以调用getName()getValue()getParameterByName()等方法,但是09 Jun 2021 10:18:14 GMT的值或参数将是什么呢?此外,为什么头部的有效参数Expires=Wed, 09 Jun 2021 10:18:14 GMT被拆分成两个部分?这似乎是错误的。然而,当我在头部上调用header.getElements()时:
Set-Cookie: SESSIONID=abcdefg01234; Path=/; Expires=Wed, 09 Jun 2021 10:18:14 GMT

由于这些元素应该是逗号分隔的,因此它被分成了两个头元素...尽管如此,我仍然找不到比这里提到的关于头元素概念更好的解释。那么,这些头元素是什么?有人能解释一下吗?


一个例子是在Content-Type头中有意义。 这通常显示为Content-Type:text / html; charset = iso-8859-1。 同样,Accept头可以为每种可接受的内容类型分配质量:Accept:text / plain; q = 0.5,text / html,text / x-dvi; q = 0.8,text / x-c(最后一个示例来自[RFC-2616](http://www.ietf.org/rfc/rfc2616.txt))。 - Barend
2个回答

2
你得到的是名为“Cookie”的标头,它是服务器为以前设置的 cookie 之一发送的标头之一。此标头值的格式为“cookie1name=cookie1valie;cookie2name=cookie2value;”等等,对于先前设置的每个 cookie 都是如此。 “Cookie”标头的实际值是所有连接在一起的 cookie 名称/值链,用“;”分隔。恢复所述标头的值后,您可以按“;”拆分它以获取每个 cookie 的名称/值。 话虽如此,显然,当 Apache 的 HttpCliont 库解析标头值时,在这里会犯一个已知的错误,并且它错误地使用“,”而不是“;”进行拆分。正如 Apache 团队在此论坛帖子上所说的那样,对于他们来说,这是正常行为,如果您想要不同的行为,请自己编写解析器。

https://issues.apache.org/jira/browse/HTTPCLIENT-810


非常抱歉,我在第一段中提到了“Set-Cookie”头,然后在最后一个示例中使用了“Cookie”...我现在已经编辑过了。 - Peter Perháč

1

是的,我确实遇到了Set-Cookie头的问题。我不明白的是什么是头元素,因为org.apache.http.Header接口有getElements()方法,我不知道它的作用是什么?我可以在HeaderElement上调用所有好的方法,例如getName() getValue() getParameterByName(),但不能在Header本身上调用。那么头元素的概念是什么?为什么只因Expires参数中有逗号就将一个完全正常的Set-Cookie头拆分成无用的两部分... - Peter Perháč
3
彼得,这似乎是指那些定义使用列表语法的标头字段元素,例如Accept。Set-Cookie存在问题,因为它没有使用该语法,所以Javadoc声称它可在此处使用似乎是一个错误。由于历史原因,解析Cookie标头与其他所有内容都非常不同,因此通用代码无法帮助这里。有关详细信息,请参阅RFC 6265。 - Julian Reschke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接