HttpClient:setHeader和addHeader有什么区别?

7

使用Apache HttpClient版本时:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>

setHeader和addHeader有什么区别?
setHeader设置响应的头信息,如果同名的头信息已存在,则会覆盖。而addHeader则是在响应中添加新的头信息,如果同名的头信息已存在,则会保留原有的头信息,并添加新的头信息。
    httpPost.addHeader("AuthenticationKey",authenticationKey);
    httpPost.addHeader("Content-Type","application/json");

    httpPost.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
    httpPost.setHeader("Pragma", "no-cache"); // HTTP 1.0
    httpPost.setHeader("X-Requested-With", "XMLHttpRequest"); // mimics a browser REST request

2
这里是 AbstractHttpMessage 文档的链接。addHeader 可能会产生重复的头,而 setHeader 则总是覆盖。 - Izruo
1
set将替换标题,add将添加另一个标题值。 - Krease
简短回答:addHeader 会创建重复的头信息,而 setHeader 则会覆盖现有的头信息。 - JavaSheriff
4个回答

16

5

setHeader 方法会覆盖同名的请求头,而 addHeader 方法不会。即使请求头已经存在,addHeader 方法也会添加一个新的同名请求头。


1

这里是两种方法的签名信息:

**addHeader**
public void addHeader(String name,
                      String value)
Description copied from interface: HttpMessage
Adds a header to this message. The header will be appended to the end of the list.



**setHeader**
public void setHeader(String name,
                              String value)
Description copied from interface: HttpMessage
Overwrites the first header with the same name. The new header will be appended to the end of the list, if no header with the given name can be found.

从这些方法描述中,我们可以理解setHeader()将用给定的新头信息替换现有的头数据,而addHeader()只是添加具有给定名称的头。


1
addHeader: 向此消息添加一个头。该头将被附加到列表末尾。 setHeader: 使用相同名称覆盖第一个头。如果找不到给定名称的头,则新头将附加到列表末尾。
来自Javadoc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接