HttpServletResponse addHeader和setHeader的区别及适用场景
核心区别
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()适用场景
- 设置标准HTTP头部:如Content-Type、Content-Length等通常只需要一个值的头部
- 需要替换已有值:当您想要确保某个头部只有一个特定值时
- 简单场景:当您只需要设置一个头部值,不需要保留历史值
addHeader()适用场景
- 需要多个同名头部:如添加多个自定义头部(如X-User-Role、X-Permission等)
- 保留历史信息:需要保留原有头部值,同时添加新值的情况
- 特殊头部需求:如需要设置多个Cookie(虽然通常使用setCookie()方法,但addHeader可以实现)
- 调试信息:添加多个调试信息头部,便于跟踪请求
总结
方法 | 行为 | 适用场景 | 示例 |
---|---|---|---|
setHeader() | 覆盖已有值 | 需要单一值的头部 | 设置Content-Type、Content-Length |
addHeader() | 追加新值 | 需要多个同名头部 | 添加多个自定义头部、调试信息 |
简单来说,如果只需要一个值,使用setHeader();如果需要多个相同名称的头部,使用addHeader()。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果