根据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更好的标题元素概念的解释。那么,这些标题元素是什么?有人可以解释一下吗?
答案 0 :(得分:2)
你得到的是名为“Cookie”的标题,它是服务器为以前设置的cookie发送的标题之一。此标头值的格式为“cokkie1name = cookie1valie; cookie2name = cookie2value;”对于之前设置的每个cookie,依此类推。“Cookie”标题的实际值是由“;”分隔的cookie名称/值的连接链。一旦恢复了所述标题的所述值,就可以将其拆分为“;”获取每个cookie的名称/值。 现在可以说,显然当Apache的HttpCliont库解析标题值在这里造成一个已知的错误时,它错误地用“,”而不是“;”分裂。正如Apache人员在这个论坛帖子上所说的那样,对于他们来说这是正常的行为,如果你想要一个不同的人做自己的解析器:
答案 1 :(得分:1)
您遇到的是Set-Cookie的问题;它以错误的方式使用分隔符“,”。
更好的例子是“允许”或“接受”。
有关详细信息,请参阅http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p1-messaging-16.html#rfc.section.3.2.p.7。