flutter的HTTP headers用法介绍
在 Flutter 中,HTTP headers 是用于在发送 HTTP 请求时传递额外信息的关键部分。它们可以用于身份验证、缓存控制、内容类型声明等。以下是关于 Flutter 中 HTTP headers 的详细说明和用法。
HTTP headers 是键值对(key-value pairs),用于在客户端和服务器之间传递附加信息。例如:
Content-Type
: 指定请求或响应的数据类型(如 application/json
)。
Authorization
: 用于身份验证(如 Bearer
)。
Cache-Control
: 控制缓存行为(如 no-cache
)。
Flutter 提供了多种方式发送 HTTP 请求并设置 headers,以下是常见的几种方式:
http
包http
是 Flutter 中常用的 HTTP 请求库。可以通过 headers
参数设置 headers。
dart
复制
import 'package:http/http.dart' as http; FuturefetchData() async { final response = await http.get( Uri.parse('https://example.com/api/data'), headers: { 'Authorization': 'Bearer your_token', 'Content-Type': 'application/json', 'Cache-Control': 'no-cache', }, ); if (response.statusCode == 200) { print('Data: ${response.body}'); } else { print('Failed to load data'); } }
dio
包dio
是一个功能更强大的 HTTP 客户端库,支持拦截器、文件上传等功能。可以通过 Options
设置 headers。
dart
复制
import 'package:dio/dio.dart'; FuturefetchData() async { final dio = Dio(); final response = await dio.get( 'https://example.com/api/data', options: Options( headers: { 'Authorization': 'Bearer your_token', 'Content-Type': 'application/json', 'Cache-Control': 'no-cache', }, ), ); if (response.statusCode == 200) { print('Data: ${response.data}'); } else { print('Failed to load data'); } }
HttpClient
Flutter 的 dart:io
库提供了 HttpClient
,可以直接设置 headers。
dart
复制
import 'dart:io'; import 'dart:convert'; FuturefetchData() async { final HttpClient client = HttpClient(); final HttpClientRequest request = await client.getUrl(Uri.parse('https://example.com/api/data')); request.headers.add('Authorization', 'Bearer your_token'); request.headers.add('Content-Type', 'application/json'); request.headers.add('Cache-Control', 'no-cache'); final HttpClientResponse response = await request.close(); final String body = await response.transform(utf8.decoder).join(); if (response.statusCode == 200) { print('Data: $body'); } else { print('Failed to load data'); } }
NetworkImage
中使用 headersNetworkImage
是 Flutter 中用于加载网络图片的类,可以通过 headers
参数设置 headers。
dart
复制
Image.network( 'https://example.com/image.png', headers: { 'Authorization': 'Bearer your_token', 'Cache-Control': 'no-cache', }, )
以下是一些常见的 HTTP headers 及其用途:
Header 名称 | 用途 |
---|---|
Authorization |
用于身份验证,通常携带 token(如 Bearer )。 |
Content-Type |
指定请求或响应的数据类型(如 application/json 、text/plain )。 |
Cache-Control |
控制缓存行为(如 no-cache 、max-age=3600 )。 |
Accept |
指定客户端能够接收的数据类型(如 application/json )。 |
User-Agent |
标识客户端(如浏览器或应用程序)的信息。 |
Accept-Language |
指定客户端偏好的语言(如 en-US )。 |
Referer |
标识请求的来源页面。 |
If-Modified-Since |
用于条件请求,仅在资源修改后返回。 |
你可以根据需求自定义 headers。例如,添加一个自定义的 X-Custom-Header
:
dart
复制
final response = await http.get( Uri.parse('https://example.com/api/data'), headers: { 'X-Custom-Header': 'custom_value', }, );
如果你需要为所有请求添加统一的 headers,可以使用拦截器。dio
包支持拦截器:
dart
复制
import 'package:dio/dio.dart'; void setupDio() { final dio = Dio(); dio.interceptors.add(InterceptorsWrapper( onRequest: (options, handler) { options.headers['Authorization'] = 'Bearer your_token'; options.headers['Content-Type'] = 'application/json'; return handler.next(options); }, )); // 使用 dio 发送请求 dio.get('https://example.com/api/data').then((response) { print('Data: ${response.data}'); }); }
服务器可能会在响应中返回一些 headers,你可以通过以下方式获取它们:
http
包:dart
复制
final response = await http.get(Uri.parse('https://example.com/api/data')); print('Response Headers: ${response.headers}');
dio
包:dart
复制
final response = await dio.get('https://example.com/api/data'); print('Response Headers: ${response.headers}');
HttpClient
:dart
复制
final HttpClientResponse response = await request.close(); print('Response Headers: ${response.headers}');
大小写敏感:HTTP headers 的名称是大小写不敏感的,但建议统一使用首字母大写的格式(如 Content-Type
)。
安全性:不要在 headers 中直接传递敏感信息(如密码),使用 HTTPS 加密传输。
缓存控制:如果需要禁用缓存,确保服务器和客户端都正确设置了 Cache-Control
头。
在 Flutter 中,HTTP headers 是发送请求时的重要部分。你可以通过 http
、dio
或 HttpClient
设置 headers,并根据需求自定义它们。合理使用 headers 可以实现身份验证、缓存控制、内容类型声明等功能。