Skip to content

Pass arguments given to Message->headers to Message->content->headers #2306

Description

@krauro

the headers attribute on Mojo::Message is currently defined as

sub headers { shift->content->headers }

Which has the effect of ignoring any arguments passed to headers.
Is this intentional? The docs mention that message->headers is the same as message->content->headers

Reproducer:

use Mojo::UserAgent;
use Mojo::Headers;
use Data::Dumper;

my $ua  = Mojo::UserAgent->new;
my $tx = $ua->build_tx("GET" => "example.com");

my $new_headers = Mojo::Headers->new;
$new_headers->accept_encoding("br");
$new_headers->user_agent("req->headers");

$tx->req->headers($new_headers);
print Dumper($tx->req->headers); # Notice headers not updated

$new_headers = Mojo::Headers->new;
$new_headers->accept_encoding("br");
$new_headers->user_agent("req->content->headers");

$tx->req->content->headers($new_headers);
print Dumper($tx->req->content->headers);

Actual Output:

$VAR1 = bless( {
                 'headers' => {
                                'accept-encoding' => [
                                                       'gzip'
                                                     ],
                                'user-agent' => [
                                                  'Mojolicious (Perl)'
                                                ]
                              }
               }, 'Mojo::Headers' );
$VAR1 = bless( {
                 'headers' => {
                                'accept-encoding' => [
                                                       'br'
                                                     ],
                                'user-agent' => [
                                                  'req->content->headers'
                                                ]
                              }
               }, 'Mojo::Headers' );

Expected Output:

$VAR1 = bless( {
                 'headers' => {
                                'accept-encoding' => [
                                                       'br'
                                                     ],
                                'user-agent' => [
                                                  'req->headers'
                                                ]
                              }
               }, 'Mojo::Headers' );
$VAR1 = bless( {
                 'headers' => {
                                'accept-encoding' => [
                                                       'br'
                                                     ],
                                'user-agent' => [
                                                  'req->content->headers'
                                                ]
                              }
               }, 'Mojo::Headers' );

If this behaviour is not intentional, then maybe headers should be defined as follows

sub headers { shift->content->headers(@_) }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions