URLConnection setRequestProperty vs addRequestProperty

时间:2012-07-12 19:07:38

标签: java http http-headers urlconnection

让我说我正在谈论HTTP到Web服务器,我会接受HTML或文本,但更喜欢HTML。换句话说,标题应该说(我想!)

接受:text / html,text / *

我正在使用Java,所以我有一个URLConnection。我应该使用:

myUrlConnction.setRequestProperty("Accept", "text/html");
myUrlConnction.addRequestProperty("Accept", "text/*");

myUrlConnction.setRequestProperty("Accept", "text/html, text/*");

还是等同于???

一般来说,我看到的大多数第三方代码似乎并不担心这些标题的排序或多个值,所以我想知道它是如何最终起作用的。

2 个答案:

答案 0 :(得分:14)

setRequestProperty和addRequestProperty之间的基本区别是: -

  1. setRequestProperty>> 设置常规请求属性。如果具有密钥的属性已存在, 将使用新值覆盖 其值。

  2. addRequestProperty>> 添加键值对指定的常规请求属性。此方法 不会覆盖 与相同密钥关联的现有值。

  3. 有关更多信息,请浏览api doc

答案 1 :(得分:6)

第一个代码段会产生两个accept-headers,而第二个代码段会给一个带两个选择器的accept-header。

它们实际上是等同的。

规范还指出更具体的媒体范围具有优先权,因此两者都会产生预期的行为。

如果必须指定多个媒体范围,并且它们具有同等特定性,则可以添加q参数。

来源:http 1.1 spec(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html):