什么是HTTP标头元素?

时间:2011-09-30 15:27:44

标签: java apache http http-headers setcookie

根据this Apache documentation“某些HTTP标头(例如set-cookie标头)具有可以分解为多个元素的值”。我无法理解这一点。例如,当我在“Set-Cookie”Header对象上使用getElements()方法时,该对象的值为:

SESSIONID=abcdefg01234; Path=/; Expires=Wed, 09 Jun 2021 10:18:14 GMT

我得到两个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

它被分成两个标题元素,因为这些元素应该以逗号分隔......但是,我找不到比mentioned here更好的标题元素概念的解释。那么,这些标题元素是什么?有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

你得到的是名为“Cookie”的标题,它是服务器为以前设置的cookie发送的标题之一。此标头值的格式为“cokkie1name = cookie1valie; cookie2name = cookie2value;”对于之前设置的每个cookie,依此类推。“Cookie”标题的实际值是由“;”分隔的cookie名称/值的连接链。一旦恢复了所述标题的所述值,就可以将其拆分为“;”获取每个cookie的名称/值。 现在可以说,显然当Apache的HttpCliont库解析标题值在这里造成一个已知的错误时,它错误地用“,”而不是“;”分裂。正如Apache人员在这个论坛帖子上所说的那样,对于他们来说这是正常的行为,如果你想要一个不同的人做自己的解析器:

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

答案 1 :(得分:1)

您遇到的是Set-Cookie的问题;它以错误的方式使用分隔符“,”。

更好的例子是“允许”或“接受”。

有关详细信息,请参阅http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p1-messaging-16.html#rfc.section.3.2.p.7