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
相关产品推荐
相关产品推荐

