根据this Apache documentation,“某些HTTP标头(例如set-cookie标头)具有可以分解为多个元素的值”.我对此不太了解.例如,当我在“ Set-Cookie”标题对象上使用getElements()方法时,该对象的值为:
SESSIONID=abcdefg01234; Path=/; Expires=Wed, 09 Jun 2021 10:18:14 GMT
我得到一个包含两个HeaderElements的数组,其中一个header元素是:
SESSIONID=abcdefg01234; Path=/; Expires=Wed
另一个是:
09 Jun 2021 10:18:14 GMT
这有用吗?在这些HeaderElement上,我可以调用诸如getName(),getValue(),getParameterByName()之类的方法,但是2021年6月9日10:18:14 GMT的值或参数是什么?另外,为什么标头Expires = Wed,2021年6月9日10:18:14 GMT的有效参数会分成两个?这似乎是错误的.但是,当我在标头上调用header.getElements()时:
Set-Cookie: SESSIONID=abcdefg01234; Path=/; Expires=Wed, 09 Jun 2021 10:18:14 GMT
它被分成两个标题元素,因为应该将它们用逗号分隔….但是,我找不到关于标题元素的概念的最佳解释,而不是mentioned here.那么,这些标题元素又是什么呢?有人可以解释吗?
解决方法:
您得到的是一个名为“ Cookie”的标头,它是服务器为先前设置的cookie发送的标头之一.此标头的值的格式为“ cokkie1name = cookie1valie; cookie2name = cookie2value;”. “ Cookie”标头的实际值是由“;”分隔的所有cookie名称/值的链接链.调出该标头的所述值后,可以将其拆分为“;”获取每个Cookie的名称/值.
这么说了,很明显,当Apache的HttpCliont库的标头值解析在这里造成了一个已知的错误时,它错误地用“,”而不是“;”分割.正如Apache家伙在此论坛主题上所说的那样,对于他们来说,这是正常的行为,如果您想让其他人创建自己的解析器:
https://issues.apache.org/jira/browse/HTTPCLIENT-810