核心区别

setHeader(name, value):

  • 如果Header中没有定义则添加
  • 如果已定义则用新的value覆盖原有value值

addHeader(name, value):

  • 如果Header中没有定义则添加
  • 如果已定义则保持原有value不改变(即追加新的值,不会覆盖已有值)

实际效果对比

使用setHeader()示例

response.setHeader("EL", "1000");
response.setHeader("EL", "2000"); // 会覆盖之前的值

最终只会有一个"EL"头部,值为"2000"

使用addHeader()示例

response.addHeader("EL", "4000");
response.addHeader("EL", "5000");
response.addHeader("EL", "5000"); // 会添加三个EL头部

最终会有三个"EL"头部,值分别为"4000"、"5000"、"5000"

适用场景

setHeader()适用场景

  1. 设置标准HTTP头部:如Content-Type、Content-Length等通常只需要一个值的头部
  2. 需要替换已有值:当您想要确保某个头部只有一个特定值时
  3. 简单场景:当您只需要设置一个头部值,不需要保留历史值

addHeader()适用场景

  1. 需要多个同名头部:如添加多个自定义头部(如X-User-Role、X-Permission等)
  2. 保留历史信息:需要保留原有头部值,同时添加新值的情况
  3. 特殊头部需求:如需要设置多个Cookie(虽然通常使用setCookie()方法,但addHeader可以实现)
  4. 调试信息:添加多个调试信息头部,便于跟踪请求

总结

方法行为适用场景示例
setHeader()覆盖已有值需要单一值的头部设置Content-Type、Content-Length
addHeader()追加新值需要多个同名头部添加多个自定义头部、调试信息

简单来说,如果只需要一个值,使用setHeader();如果需要多个相同名称的头部,使用addHeader()。