Flutter中如何从Head请求响应中获取指定Header值
正确获取HTTP Head请求中的Last-Modified字段值
你当前通过分割headers.values.toString()并按索引取值的方式完全不可靠,原因很明确:
- HTTP响应头的字段顺序没有固定标准,没法保证
Last-Modified始终处于第2个位置 headers.values.toString()的输出格式依赖Map的内部实现,不同环境下可能出现格式差异,分割后的结果根本不稳定
正确的做法是直接利用Response.headers的键值对特性来取值——Flutter http库返回的headers是一个键值映射,HTTP头字段名本身大小写不敏感,你可以直接通过字段名精准获取:
修改后的代码
Future<void> fetchModifiedDate(String fileUrl, BuildContext context) async { if (await checkNetworkConnection(context)) { try { final response = await http.head(Uri.parse(fileUrl)); // 兼容服务器返回的不同大小写格式 final lastModified = response.headers['Last-Modified'] ?? response.headers['last-modified']; if (lastModified != null) { modifiedDate = lastModified.trim(); print('Last-Modified值: $modifiedDate'); } else { print('响应头中未找到Last-Modified字段'); } } catch (e) { print('Head请求失败: $e'); } } }
代码优化点说明
- 用
await替代then回调,让代码逻辑更线性易读,避免回调嵌套 - 同时尝试两种常见的字段名大小写格式(
Last-Modified和last-modified),兼容不同服务器的返回习惯 - 增加空值判断,防止获取不到字段时出现空指针异常
- 新增
try-catch捕获请求过程中的网络异常或解析异常,提升代码健壮性
内容的提问来源于stack exchange,提问作者Jaimin Modi
相关产品推荐
相关产品推荐

