NAME

Fetch::Headers - ordered, case-insensitive, multi-valued HTTP headers

SYNOPSIS

my $h = $res->headers;              # a Fetch::Headers
my $ct = $h->get('content-type');   # first value, case-insensitive
my @sc = $h->get_all('set-cookie'); # every value, in order

my $req = Fetch::Headers->new(Accept => 'application/json');
$req->add('X-Trace' => 'a');
$req->add('X-Trace' => 'b');        # repeatable header kept twice

# still behaves as the old [k, v, k, v, ...] arrayref
my @flat = @$h;

DESCRIPTION

A small container for HTTP header fields. Field names compare case-insensitively; insertion order and duplicate names are preserved (so Set-Cookie and other repeatable fields survive intact). The object is a blessed arrayref of a flat name => value list, so code that treated $res->headers as a [k, v, ...] arrayref keeps working.

METHODS

new(%pairs | \@pairs | \%hash | $headers)

Build from a flat name/value list, an arrayref of pairs, a hashref, or another Fetch::Headers.

get($name) / get_all($name)

The first value for $name, or every value in order.

set($name, @values) / add($name, $value) / remove($name)

Replace, append, or delete a field.

exists($name) / names / pairs / clone

Membership test; the distinct field names in order; the flat name/value list; a shallow copy.

merge($other)

Overlay another header set: each name it carries replaces this object's values for that name.

AUTHOR

LNATION <email@lnation.org>

LICENSE AND COPYRIGHT

This software is Copyright (c) 2026 by LNATION. This is free software, licensed under the Artistic License 2.0.