根据this Apache documentation,“某些HTTP标头(例如set-cookie标头)具有可以分解为多个元素的值”。我对此不太了解。例如,当我在“Set-Cookie”标题对象上使用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()之类的方法,但是的值或参数是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名称/值的串联链接。调出所述标头的所述值后,可以将其拆分为“;”获取每个Cookie的名称/值。
如此说来,很明显,当Apache的HttpCliont库的标头值解析在这里造成了一个已知的错误时,它错误地用“,”而不是“;”分割。正如Apache家伙在此论坛主题上所说的那样,对于他们来说,这是正常的行为,如果您想要一个不同的人来创建自己的解析器:

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

关于java - 什么是HTTP header 元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7612667/

10-09 20:24
查看更多