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

Flutter中Dart http包默认请求头及Client类差异问询

Dart http包默认请求头与Client类差异

一、默认请求头说明

GET 请求

使用http.get()等顶层函数发送GET请求时,默认携带以下请求头:

  • Host: 自动从请求URL中提取(例如请求https://example.com/api时,Host为example.com)
  • Accept-Encoding: gzip
  • Connection: close(顶层函数每次请求会创建临时连接,请求完成后立即关闭)
  • User-Agent: Dart/<版本号> (dart:io)(例如Dart/3.1.0 (dart:io))

POST 请求

使用http.post()顶层函数发送POST请求时,除上述GET请求的默认头外,还会额外添加:

  • Content-Type: text/plain; charset=utf-8(未手动指定Content-Type且body为字符串时)
  • Content-Length: 自动根据请求body长度计算并添加

若POST请求的body为FormData(需配合http.MultipartRequest),默认Content-Type会变为multipart/form-data并包含boundary参数,同时自动处理相关Content-Length等头。

二、使用Client类的差异

  1. 连接持久化:
    Client类维护持久化连接,默认Connection头为keep-alive,而非顶层函数的close。多次通过同一个Client发送请求时,会复用TCP连接,提升请求效率。

  2. 自定义默认请求头:
    可为Client实例设置defaultHeaders,后续所有通过该Client发送的请求都会自动携带这些头。示例:

final client = http.Client();
client.defaultHeaders['Authorization'] = 'Bearer token123';
// 后续client.get()或client.post()都会带上Authorization头

顶层函数每次请求独立,不会保留之前设置的头。

  1. 资源管理:
    使用Client时需手动调用client.close()释放连接资源,否则会造成泄漏;顶层函数会自动管理临时连接生命周期,请求完成后自动关闭。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:51:21