You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift:URLSession/URLRequest自动添加额外Header如何移除?

解决iOS URLSession自动添加Accept-Language请求头的问题

URLSession的共享会话(URLSession.shared)会自动注入一些默认请求头,包括Accept-Language,这些默认头的优先级高于你直接在URLRequest中设置的内容,所以直接调用setValue(nil, forHTTPHeaderField:)无法移除它们。

方案1:完全禁用默认请求头

创建自定义的URLSessionConfiguration,清空默认的额外请求头,再用这个配置创建专属的URLSession,这样发起的请求就不会携带系统自动添加的头:

// 创建自定义配置,清空默认请求头
let config = URLSessionConfiguration.default
config.httpAdditionalHeaders = [:] // 也可以在这里设置你需要的自定义请求头

// 基于自定义配置创建URLSession
let session = URLSession(configuration: config)

// 构造请求
var request = URLRequest(url: URL(string: "http://localhost:3000/iosnativereq")!)

// 发起请求
let task = session.dataTask(with: request) { data, response, error in
    print(data, response, error)
}
task.resume()

方案2:仅移除特定请求头(保留其他默认头)

如果需要保留系统自动添加的其他请求头,只移除Accept-Language,可以先获取默认配置的头字典,移除指定键后再赋值给自定义配置:

// 获取默认的请求头字典,移除Accept-Language
var defaultHeaders = URLSessionConfiguration.default.httpAdditionalHeaders ?? [:]
defaultHeaders.removeValue(forKey: "Accept-Language")

// 创建自定义配置并更新请求头
let config = URLSessionConfiguration.default
config.httpAdditionalHeaders = defaultHeaders

// 创建专属URLSession
let session = URLSession(configuration: config)

// 构造并发起请求
var request = URLRequest(url: URL(string: "http://localhost:3000/iosnativereq")!)
let task = session.dataTask(with: request) { data, response, error in
    print(data, response, error)
}
task.resume()

内容的提问来源于stack exchange,提问作者user2330482

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:07:49